C(输出)中的无符号和有符号值

sam*_*ain 8 c unsigned signed

signed int x = -5;
unsigned int y = x;
Run Code Online (Sandbox Code Playgroud)

有什么价值y?这是怎么回事?

ken*_*ytm 17

这取决于最大值unsigned int.通常,a unsigned int是32位长,因此UINT_MAX是2 32 - 1.C标准(§6.3.1.3/ 2)要求执行带符号→无符号转换

否则,如果新类型是无符号的,则通过重复地添加或减去一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内.

因此Y = X +((2 32 - 1)+ 1)= 2 32 - 5 = 4294967291.


2的补充平台中,现在大多数实现y与2的补码表示相同x.

-5 = ~5 + 1 = 0xFFFFFFFA + 1 = 0xFFFFFFFB = 4294967291.


Phi*_*sse -1

y=0xfffffffb 它是 -5 的二进制表示(二进制补码)