'(无符号)1'和'(无符号)〜0'之间的区别

pro*_*er8 1 c operators bitwise-operators

(unsigned)~0和之间有什么区别(unsigned)1.为什么是unsigned~0IS -1unsigned11?它是否与无符号数存储在内存中的方式有​​关.为什么无符号数字会给出签名结果.它也没有给出任何溢出错误.我正在使用 GCC编译器:

#include<sdio.h>
main()
{
 unsigned int x=(unsigned)~0; 
 unsigned int y=(unsigned)1; 
 printf("%d\n",x); //prints -1
 printf("%d\n",y); //prints 1
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*ath 5

因为%d是一个signed int说明符.使用%u.

4294967295在我的机器上打印.

正如其他人所提到的,如果你将最高的无符号值解释为有符号,则得到-1,请参阅维基百科条目以获得两个补码.