计算机的整数是循环编制的,从二进制000开始,依次加1成001、010、011……,到111之后,再加又变回000,反过来减也是一样。问题在于我们要求程序怎么解释满格的那个111,当我们把数字理解为无符号整数的时候,111是十进制的7;当我们把数字理解为有符号整数的时候,它是-1,这就是再加1会变成0的原因。对无符号数据,永远不可能出现负值!
再强调一遍:同一个二进制数据111,显示成7还是-1,取决于
编程者要求显示为有符号数还是无符号数,计算机内部是不管的。
测试如下代码,看看结果:
int x = 0xff;
printf("%d,%u\n", x, x);
[
本帖最后由 TonyDeng 于 2015-1-6 10:16 编辑 ]