我有以下代码:
#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/