已要求我创建一个函数,该函数将使用无符号的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;
}
让我知道您是否还有其他问题,我会尽力回答。
答案 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