C: 十六进制输出是 "ffff"?

标签 c hex output

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

int main(){

int first = cdab3412;

int second = abcd1234;

int result1 = (second >> 16) | (first & 0xFFFF0000);
int result2 = (first << 16) | (second & 0x0000FFFF);

printf("Outputs: %x and %x.\n", result1, result2);

result2 结果如预期输出:34121234

然而,result1 输出 ffffabcd。如果我将它保留为 (first & 0xFFFF0000),它会正确输出 cdab0000。

为什么 result1 是 ffffabcd 而不是 cdababcd?

最佳答案

它叫做 sign extension .将类型设置为 unsigned int,它应该可以工作。

关于C: 十六进制输出是 "ffff"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860092/

相关文章:

c - 十六进制 float ,四舍五入

hex - 可执行文件如何在位/字节级别上工作?

python - 附加列表后输出为空

c++ - 尝试在 C++ 程序中设置简单的键盘输入。使用变量存储 true 或 false

c - 代码执行的结果会是什么? C 运算符优先级

objective-c - 从 dlsym() 返回值的函数?

c - 将数字拆分为整数和小数部分的最有效方法

swift - 如何在 Swift 中生成随机长十六进制数?

c - 下面程序的输出应该是什么?

c - 给array seat赋值很慢