为什么它是无限循环?

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.

因此,i0to 增加127,然后变为-128up 127,等等,如果它已经签名.如果它是未签名的,那么它将从那里0开始255,然后它将成为0(由于溢出),并且故事再次开始!

  • @HardRain:那是什么?即使这是无限循环. (3认同)

Dan*_*her 5

因为所有char都小于256.

为了进行比较,将char i转换为int,通常为-128和127之间的值(带有符号的二进制补码8位chars),如果char是无符号8位类型,则为0到255(含).

一旦达到最大值a char,如果char是无符号,则进一步增加将导致环绕为0 ,并且对于实现定义的int值128的转换,将增量产生的值转换char为存储的时间,通常是结果是-128,char签名时.