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

2025-03-10 16:58:52
推荐回答(5个)
回答1:

超范围了。你的编译器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,

回答2:

我运行的结果是32767,32768,因为b是long型的,所以并不会溢出,望采纳!

回答3:

因为int型的范围就是 正的32767 ~~~ 负的 32768

回答4:

long int和short int最大数都是32767的,所以32768变成0

回答5:

我做这题时卷子写的答案也是a,我当时认为的解释是:int的取值范围是-32768~32767,但是,我在c环境下运行的结果却是
a=32767,b=32768
很是郁闷!求解