#include <stdio.h>
int main()
{ char i=0;
for(;i>=0;i++);
printf("%d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出为-128.据我所知,字符变量将溢出,所有位将为0.并且取两个补码将再次为0.有人可以解释这个过程吗?
编辑:只是为了澄清这不是我的计划.这是竞争性考试中的编程问题.
小智 5
你对溢出的假设是不正确的.溢出无符号类型会将所有位设置为零,但是未定义溢出有符号类型,因此可能导致任何值.
因此,您获得的结果取决于您的(编译器)实现.可以解释一下
char.char有8位.鉴于所有这些假设(并且记住,这些假设都没有由C指定),增量127作为最大可能char值(表示为0111 1111)得出-128最小可能值(表示为1000 0000).
TL; DR - 您的代码未定义,请勿编写此类代码.