由于某种原因,当使用指针引用位时,高 32 位会丢失
机器是小尾数法。
s64 num = 0x12345678ABCDEF99;
printf("%x%x", *(int* )((&num) + sizeof(int) ) ,*(int* )(&num));
//i used *(int* )(&num)to show that it works only with the first 32 bits
输出:0abcdef99
最佳答案
((&num) + sizeof(int))
这不会将 &num
指针移动到 4 个字节(假设 sizeof (int)
为 4),而是移动到 4 int
,即。例如,16 字节。这会:
((unsigned char *) &num + sizeof (int))
请注意,当您取消引用该对象时,这也是未定义的行为,因为它违反了 C 别名规则。正如评论中也提到的,%x
需要一个 unsigned int
,但您传递一个 int
参数。
关于c - 在 c 中检索有符号 long long 的最高有效 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32488634/