初学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,我想知道为什么?详细点更好
展开
 我来答
网海1书生
科技发烧友

2019-11-20 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
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)则通常在这种情况下会报“溢出”错误(意思就是超出了数值范围)。
问下问题002
2019-11-20 · TA获得超过222个赞
知道小有建树答主
回答量:89
采纳率:81%
帮助的人:54.6万
展开全部
因为while(--n<=2);后面有个分号,所以这一句是死循环(虽然不是真的死在里面)(后面的printf不在循环内)。while做的工作就是一直给n减一,直到n大于2。
然后n一直减啊减,n变得负的很小。直到小到极致(short溢出了),然后溢出修改了符号位,就变到最大值,short的最大值就是n=32767了。然后while循环不满足条件,结束循环,执行printf。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式