为什么当你写的时候它会进入无限循环(char c=0;约<256;C++)?

Why does it go into an infinite loop when you write (char c=0;c<256;c++)?

本文关键字:lt C++ char 当你 候它会 无限循环 为什么      更新时间:2023-10-16

代码如下:

for(char c=0;c<256;c++)
  printf("hello");

为什么会进入无限循环?

这是因为在您的例子中,char是一个8位整数。

所以char只有-128127的值,总是小于256

很可能您的char数据类型限制为8位。如果默认的char是有符号的,8位,并且你使用的是2 '补码,它将始终在-128..127的范围内,因此将始终小于256。

如果unsigned 8位(编码无关紧要,因为它只影响有符号的数字),它将始终在0.255范围内,因此也将始终低于256。

请注意,C没有强制要求2的补码,所以范围可能会有一点变化,但是在所有可能的编码和只有8位的情况下,它可以拥有的最大值是255

只有当你有超过8位可用时,char才能够达到256。这是可能的,因为C只要求最小位数。您可以通过在<limits.h>中查找CHAR_BITS来检查您的实现提供了什么,但是,在绝大多数情况下,这将是8。

为完整起见,三种可能的C编码的8位范围为:

                        signed      unsigned
                        =========   ========
one's complement        -127..127   0..255
sign/magnitude          -127..127   0..255
two's complement        -128..127   0..255

char只能存储从0到255的值,如果它是无符号的,或者-128到127,如果它是有符号的,这取决于您的构建设置。无论哪种情况,它总是小于256。将1添加到最高值将使其绕行到最低值

正在循环字节。基本上,当你超过变量类型所能存储的最大容量时,它会自动换行并重新开始。

256不是char的最大保存数。它是一个字符可以表示的可能值的最大数量,这是两件非常不同的事情。

一个char是8位(在几乎所有的正常实现中)

8位类型可以保存256个不同的值。但是对于普通的有符号字符,这些可能的值在-128到127的范围内。

unsigned char仍然是8位,因此包含256个可能的值,但这些值的范围在0到255之间。