我想用C语言将12位转换为十进制数。
例如,如果我们有:
A1 = 0x5D A2 = 0xA0(A2中的LSB位始终为0)
所以,如果我们将这些放在一起,我们就有了:
0x5DA,它等于1498。
你能指导我怎样才能在C中做到这一点?
答案 0 :(得分:5)
A1需要向左移4位,以便为A2的位留出空间,这可以通过A1 << 4
完成。
然后A2需要向右移4位以消除最低有效位中的额外零,这可以通过A2>>4
完成。
然后这两个部分可以与|
运算符结合使用:
(A1 << 4) | (A2 >> 4);
答案 1 :(得分:3)
这取决于您将转换为十进制数的定义。
当你这样做......
int A1 = 0x5D;
int A2 = 0xA0;
int B = (A1 << 4) | (A2 >> 4); // (*)
...然后B
可以用作 - 如果是十进制,即使它的表示是或可能是二进制:
printf("%d", B);
声明int B = (A1 << 4) | (A2 >> 4);
可以解释如下:
<<
左移,比特将被移出,零将填满>>
是右移,位将被移出,零将填满X << Y
表示shift X to the left by Y binary digits
|
使用按位或总结:向左移动A1
4位会在最不重要的一侧引入四个零。然后用A2
“减去”其四个最低有效位填充它。
答案 2 :(得分:0)
您可以在C
:
val = ((A1 << 8) + A2) >> 4;
您只需连接两个数字,然后删除始终为零的最后4位。