类型signed char
和unsigned char
是不同的整数类型。顾名思义,一种是有符号类型(即,可以表示负值),另一种是无符号类型(即,. 只能表示非负值)。
char
没有signed
或前缀的 typeunsigned
是另一种不同的类型。它具有与 signed char
or 相同的表示和范围unsigned char
;哪一个是实现定义的。(微妙的一点:尽管其中两种具有相同的特征,但它们仍然是三种不同的类型。)
对于典型的实现,所有这三种类型都是 8 位,并且有符号类型使用二进制补码表示,signed char
范围为 -128 .. +127 和unsigned char
范围 0 .. +255。
在您的实现中,似乎char
已签署 plain (这很常见)。所以 ifi
是 type char
, theni < 128
总是正确的,你有一个无限循环。并且增加一个char
或signed char
对象超过其最大值实际上具有未定义的行为,但通常它会从最大值环绕到最小值,这就是您所看到的。(当正在打印的字符是\007
ASCIIBEL
字符时,可能会产生哔声;或者,您发送的控制字符会弄乱您的终端。)
将其设置为 0 到 255i
的unsigned char
范围,当它达到 128 时循环停止。(将无符号类型的值递增超过其最大值是明确定义的,但无论如何您都不要这样做。)
int
始终是有符号类型,语言要求其范围至少为 -32767 .. +32767。如今,它通常是 32 位,范围为 -2147483648 .. +2147483647。但即使有最低要求的范围,它对于你的循环来说也足够大了。