(unsigned)~0和(unsigned)1的区别是什么?为什么unsigned of ~0是-1而unsigned of 1是1?它与无符号数字存储在内存中的方式有关吗?为什么没有符号的数字会给出一个有符号的结果。它也没有产生任何溢出错误。我正在使用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
}发布于 2013-09-30 01:24:01
您的系统使用负数的http://en.wikipedia.org/wiki/Two%27s_complement表示形式。在这种表示法中,由所有二进制数组成的二进制数表示最大负数-1。
因为倒置零的所有位会给出一个由所有数字组成的数字,所以当你用一个期望有符号数字而不是无符号数字的%d来重新解释这个数字为一个有符号的数字时,你会得到它。
https://stackoverflow.com/questions/19085172
复制相似问题