提问者:小点点

无符号字符范围为0到255


#include <iostream> 
using namespace std; 
int main() 
{ 
    unsigned char counter = 0; 
    for (counter = 0; counter <= 255; counter++) { 
        printf("%d ", counter); 
    } 
    return 0; 
} 

正确的输出是无限循环,但我认为输出是0,1,。。。255,因为无符号字符的范围是0到255.当计数器变为256时,只有它超出了范围。 但这里我们的条件是反255,请澄清我的疑问


共2个答案

匿名用户

将无符号字符看作一个字节:0->; 0b00000000 1->; 0b00000001..255->; 0B11111111

那么下一个数字是0,因为你不能有第9位。 所以在0b11111111之后是0b00000000。

这就是为什么它是一个无限循环,它永远不会达到256,永远停留在0到255之间。

匿名用户

这将导致无限循环,因为if循环中的条件(counter<<=255)总是true

此条件不可能是false:变量counter不能包含高于255的值。