关于C语言的一个小小的问题

#include <stdio.h>
#include <stdlib.h>
main()
{
short int a,b;
a=-32768;
b=a-3;
printf("%d,%d",a,b);
system("pause");
return 0;
}

结果是-32768,32765
想知道为什么a可以正常输出,b会这样,知道short int是-32767到32767
我想知道具体怎么会出现这样的问题
这样说的话...由于short int只能是16位...
32768是1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-32728的话二进制是1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
却因为是short int而被砍掉了首位?也成了1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
是这样吗?

第1个回答  2010-06-17
其实这个和时钟的原理是一样的,它是循环的,也就是说,short int的范围是
-32768~32767,这样,-32768-1就循环到了32767,在减2就得了32765,你可以研究一下他们的机器码存储,就知道他的原理了
第2个回答  2010-06-17
因为整型数据的溢出,结果当然错误。
a=-32768
-32768 二进制表示:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
a-1就是32767:
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
a-3就是32765:
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1本回答被提问者采纳
相似回答