什么是unsigned char?
这取决于各个实现,因为 C 标准并未定义 char
的符号性。根据平台的不同,char
可能是 signed
或 unsigned
,因此如果您的实现取决于此,请明确要求 signed char
或 unsigned char
。如果您打算表示字符串中的字符,则只需使用 char
,因为这将与您的平台在字符串中放置的内容相匹配。
signed char
和 unsigned char
之间的区别正如您所期望的那样。在大多数平台上,signed char
将是一个 8 位的二进制补码数字,范围从 -128
到 127
,而 unsigned char
将是一个 8 位无符号整数(0
到 255
)。请注意,标准并不要求 char
类型有 8 位,只要求 sizeof(char)
返回 1
。您可以使用 limits.h
中的 CHAR_BIT
获取 char 中的位数。尽管如此,今天几乎没有任何平台会有除 8
以外的 char 位数。
这里有一个关于此问题的很好的总结,请点击这里。
正如其他人在我发布此问题后提到的那样,如果您真的想表示小整数,最好使用 int8_t
和 uint8_t
。
\n\n在C++中,有三种不同的字符类型:\n\n- char\n- signed char\n- unsigned char\n\n如果你正在使用字符类型进行文本处理,请使用未经修饰的char:\n\n- 它是字符字面值的类型,例如\'a\'或\'0\'(仅在C++中,C中它们的类型为int)\n- 它是组成C字符串的类型,例如\"abcde\"\n\n它也可以作为数字值使用,但未指定该值是作为有符号还是无符号处理的。注意不要使用不等式进行字符比较 - 虽然如果你限制自己使用ASCII(0-127),你将基本上是安全的。\n\n如果你正在将字符类型作为数字使用,请使用:\n\n- signed char,它至少可以提供-127至127的范围。 (-128至127是常见的)\n- unsigned char,它至少可以提供0至255的范围。\n\n“至少”,因为C++标准只给出了每种数字类型所需覆盖的最小值范围。 sizeof(char)必须为1(即一个字节),但一个字节理论上可以为32位。 sizeof仍然会报告其大小为1 - 这意味着您可以拥有sizeof(char)== sizeof(long)==1。