c - 在 c 中检索有符号 long long 的最高有效 32 位

标签 c bit

由于某种原因,当使用指针引用位时,高 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/

相关文章:

c++ - 与 c 相比,为什么开发人员将 c/c++ 用于嵌入式系统而不是像 python 这样的高级语言?

c++ - 我如何使用位操作对单个整数中的两个数字进行编码和解码?

java - 读取 10 位定点 float

c++ - 我不明白为什么我在按位或短字符和字符时得到这个结果

c - 在两点之间用新位替换旧位

c - 在 C 中用两个字符串初始化一个 const char * const *

c - 使用SIMD优化一维热方程

c - 恢复到 C 中内存区域中的先前值

c - 为什么位为 01110011 的字节不会变成字符 `s` ?

c - C 中的内部短路评估