将12位转换为十进制

时间:2014-06-03 13:02:24

标签: c

我想用C语言将12位转换为十进制数。

例如,如果我们有:

A1 = 0x5D A2 = 0xA0(A2中的LSB位始终为0)

所以,如果我们将这些放在一起,我们就有了:

0x5DA,它等于1498。

你能指导我怎样才能在C中做到这一点?

3 个答案:

答案 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位。