C:十六进制输出带有“ffff”?

时间:2013-09-17 21:19:25

标签: 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。如果我把它保留为(第一个&amp; 0xFFFF0000),它会正确输出cdab0000。

为什么result1是ffffabcd而不是cdababcd?

2 个答案:

答案 0 :(得分:5)

它被称为sign extension。将类型设置为unsigned int,它应该有效。

答案 1 :(得分:4)

second是有符号整数。因此,当您将其向右移动时,最左边的位变为1。

如果您使用unsigned int's,您将获得预期的结果。

签名与无签名一直是混乱的源头,所以你需要谨慎行事。