Har*_*ain 5 c++ integer-overflow char infinite-loop
我试图将255 ascii字符写入控制台,但我有一个无限循环
for(char i=0; i<256; i++) {
cout << i << ' ';
}
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 13
因为i永远不会大于或等于256.它会在它之前溢出.请记住,它的类型是char最大值,255如果它是无符号的,否则,127如果它是有符号的.
无论char是无符号还是有符号,都是实现定义的.但通常,根据我的经验,它是签名的,这意味着通常最大值char可以达到127.
因此,i从0to 增加127,然后变为-128up 127,等等,如果它已经签名.如果它是未签名的,那么它将从那里0开始255,然后它将成为0(由于溢出),并且故事再次开始!
因为所有值char都小于256.
为了进行比较,将char i转换为int,通常为-128和127之间的值(带有符号的二进制补码8位chars),如果char是无符号8位类型,则为0到255(含).
一旦达到最大值a char,如果char是无符号,则进一步增加将导致环绕为0 ,并且对于实现定义的int值128的转换,将增量产生的值转换char为存储的时间,通常是结果是-128,char签名时.