初学c语言while循环这是怎么回事?
voidmain(){shortintn=1;while(--n<=2);printf("%d",n);}输出的结果是32767,我想知道为什么?详细点更好...
void main( )
{ short int n=1;
while(--n<=2);
printf("%d",n);
}输出的结果是32767,我想知道为什么?详细点更好 展开
{ short int n=1;
while(--n<=2);
printf("%d",n);
}输出的结果是32767,我想知道为什么?详细点更好 展开
展开全部
while(--n<=2); 这是一个空循环,由于n的初始值是1,比2小,而把它减1后仍然比2小,所以循环会一直进行下去,直到n的值变为-32768,这是short int类型的最小值,这时候再把n减1,神奇的一幕发生了,n变成了short int类型的最大值32767,这样循环条件不成立,退出循环,所以最终输出n的值为32767
这最后一步之所以发生,与C语言的二进制运算方式有关,-32768的二进制为
1000000000000000
把它减1,就变成
0111111111111111
而这个数的十进制就是32767。同理,把32767加1,就变成-32768
这是因为C语言是把符号位也参与运算的。其他语言(比如VB)则通常在这种情况下会报“溢出”错误(意思就是超出了数值范围)。
这最后一步之所以发生,与C语言的二进制运算方式有关,-32768的二进制为
1000000000000000
把它减1,就变成
0111111111111111
而这个数的十进制就是32767。同理,把32767加1,就变成-32768
这是因为C语言是把符号位也参与运算的。其他语言(比如VB)则通常在这种情况下会报“溢出”错误(意思就是超出了数值范围)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询