按位C-从无符号整数

时间:2018-11-04 01:54:38

标签: c bit-manipulation bitwise-operators bit-shift

已要求我创建一个函数,该函数将使用无符号的32位int并从无符号的int中解压缩3个有符号的10位int。此任务的上下文是一个拆包函数,该函数使用32位无符号int作为输入,并将长度为3的数组xyz占用,并从原始int解包了具有x,y和z坐标的数组,这些坐标是10位带符号整数。

我编写了以下程序,该程序对于正值似乎正常,但对于负值却无效。我尝试打印输出坐标的十六进制值,以更好地理解基础二进制,对我来说一切似乎都很好,但是解释的数字出了错。对于带符号的整数,编译器使用二进制补码来解释二进制。

void coordinates(unsigned int p, int xyz[3]) {
  unsigned int z = ((p << 22) >> 22) & 0x800003FF;
  xyz[0] = (~0 << 32) | (p >> 20) ;
  xyz[1] = (~0 << 32) | (p >> 10) & 0x3FF;
  xyz[2] = (~0 << 32) | z;
}

让我知道您是否还有其他问题,我会尽力回答。

1 个答案:

答案 0 :(得分:0)

以下应为您工作:

<form  method="POST">
button
<li class="ipsButton ipsButton_medium ipsButton_importantipsButton_fullWidth12">
    <a  title='{lang="accept"}' name="setitlive" id="setitlive" type="submit" onclick=" setitlive(); ">
        {lang="accept"}
    </a> 
</li>

输出

$ gcc main.c -o main.exe; ./main.exe;
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
-1 -1 -1 -1
1FF7FDFF 000001FF 000001FF 000001FF
536346111 511 511 511
20080200 FFFFFE00 FFFFFE00 FFFFFE00
537395712 -512 -512 -512
00000000 00000000 00000000 00000000
0 0 0 0