在C/ c++中,unsigned char是用来干什么的?它和常规char有什么不同?


当前回答

在c++中,有三种不同的字符类型:

字符 签署了字符 无符号字符

如果你在文本中使用字符类型,请使用非限定字符:

它是像'a'或'0'这样的字符字面量的类型(仅在c++中,在C中它们的类型是int) 它是构成C字符串的类型,如"abcde"

它也是一个数字值,但是没有指定该值是有符号还是无符号。小心通过不平等进行字符比较——尽管如果你将自己限制在ASCII(0-127),你是安全的。

如果你使用字符类型作为数字,请使用:

Signed char,它至少提供了-127到127的范围。(-128到127是常见的) Unsigned char,它至少提供了0到255的范围。

“至少”,因为c++标准只给出了每个数字类型需要涵盖的最小值范围。Sizeof (char)被要求为1(即一个字节),但一个字节在理论上可以是32位。Sizeof仍然会报告它的大小为1 -这意味着你可以有Sizeof (char) == Sizeof (long) == 1。

其他回答

就直接值而言,当已知值在CHAR_MIN和CHAR_MAX之间时,使用常规char,而unsigned char在正端提供了两倍的范围。例如,如果CHAR_BIT为8,则常规char的范围只能保证为[0,127](因为它可以是有符号的或无符号的),而无符号char将是[0,255],而有符号char将是[-127,127]。

就其用途而言,标准允许将POD(普通旧数据)对象直接转换为unsigned char数组。这允许您检查对象的表示和位模式。对于char或signed char,不存在安全类型双关的相同保证。

unsigned char是一个无符号字节值(0到255)。你可能认为char是一个“字符”,但它实际上是一个数值。常规字符是带符号的,因此有128个值,这些值映射到使用ASCII编码的字符。但无论哪种情况,您在内存中存储的都是字节值。

在c++中,有三种不同的字符类型:

字符 签署了字符 无符号字符

如果你在文本中使用字符类型,请使用非限定字符:

它是像'a'或'0'这样的字符字面量的类型(仅在c++中,在C中它们的类型是int) 它是构成C字符串的类型,如"abcde"

它也是一个数字值,但是没有指定该值是有符号还是无符号。小心通过不平等进行字符比较——尽管如果你将自己限制在ASCII(0-127),你是安全的。

如果你使用字符类型作为数字,请使用:

Signed char,它至少提供了-127到127的范围。(-128到127是常见的) Unsigned char,它至少提供了0到255的范围。

“至少”,因为c++标准只给出了每个数字类型需要涵盖的最小值范围。Sizeof (char)被要求为1(即一个字节),但一个字节在理论上可以是32位。Sizeof仍然会报告它的大小为1 -这意味着你可以有Sizeof (char) == Sizeof (long) == 1。

一些人在谷歌上找到了这个,人们对此进行了讨论。

无符号字符基本上是一个单字节。所以,如果你需要一个字节的数据,你可以使用它(例如,也许你想用它来设置标志的开启和关闭,以传递给一个函数,就像在Windows API中经常做的那样)。

Signed char的范围是-128到127;Unsigned char的范围是0到255。

根据编译器的不同,Char将等价于有符号Char或无符号Char,但它是一种不同的类型。

如果你使用c风格的字符串,只使用char。如果需要使用字符进行算术运算(非常少见),请显式指定signed或unsigned以实现可移植性。