main() { long int a,b; a=32767; b=a+1; printf("%d,%d",a,b);getch(); }为什么结果是32767,0

如题所述

超范围了。你的编译器long int取值是-32768~32767(二进制16位数),C语言是用二进制表示数值,也就是说long int取值范围为负2的16次方到2的16次方减1(正数从0开始到n-1),当a=32767是就是long int的最大大值,二进制表示为1111111111111111十六个一,当程序加一时,就变成17位(最左一位为1,其余位为0),但long int没有十七位,所以他省去第十七位数,就是最左边的1那位,16位均为0所以b就为0,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-28
我运行的结果是32767,32768,因为b是long型的,所以并不会溢出,望采纳!
第2个回答  2011-04-28
因为int型的范围就是 正的32767 ~~~ 负的 32768
第3个回答  2011-04-28
long int和short int最大数都是32767的,所以32768变成0
第4个回答  2020-05-19
我做这题时卷子写的答案也是a,我当时认为的解释是:int的取值范围是-32768~32767,但是,我在c环境下运行的结果却是
a=32767,b=32768
很是郁闷!求解