main() { unsigned int a; int b=-1; a=b; printf("%u",a); } 程序运行后的输出结果是

2025-03-10 18:13:01
推荐回答(1个)
回答1:

如果你的编译环境定位int型是16位(如Turbo C),int型的表示范围是[-32768,32767]。

a是无符号整数,b是有符号整数。区别是a的最高位表示数值,b的最高位表示符号(1表示负数,0表示非负数)
a得到-1。
[-1]原码:1000 0000 0000 0001
按除符号位外,各位取反,末位加1的规则,将负数的原码转换为补码:
[-1]补码:1111 1111 1111 1111
即无符号数a的二进制最终表示是11111111 11111111,对应十进制是65535,即a最终是65535。

如果你的编译环境定位int型是32位(如Visual C++),此时无符号数a(-1)的值用二进制表示是
11111111 11111111 11111111 11111111,即4294967295。

你的输出有以下两种可能:
Turbo C中输出:65535
Visual C++中输出:4294967295