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

2 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);
Run Code Online (Sandbox Code Playgroud)

result2结果如预期输出:34121234

但是,result1输出ffffabcd.如果我把它保留为(第一个&0xFFFF0000)它正确输出cdab0000.

为什么result1 ffffabcd而不是cdababcd?

Fre*_*die 5

它被称为符号扩展.将类型设置为unsigned int,它应该工作.