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


当前回答

如果你喜欢使用各种类型的特定长度和符号,你可能更好的uint8_t, int8_t, uint16_t等,因为他们完全做他们说。

其他回答

这取决于实现,因为C标准没有定义char的符号性。根据平台的不同,char可能是有符号的,也可能是无符号的,因此如果您的实现依赖于它,则需要显式地请求有符号char或无符号char。如果您打算表示字符串中的字符,则使用char,因为这将与您的平台在字符串中放入的内容相匹配。

有符号char和无符号char之间的区别正如您所期望的那样。在大多数平台上,signed char将是一个8位的2补数,范围从-128到127,unsigned char将是一个8位的无符号整数(0到255)。注意标准并不要求char类型有8位,只要求sizeof(char)返回1。你可以在limited .h中使用CHAR_BIT获取一个char的比特数。然而,如今很少有平台会使用8以外的东西。

这里对这个问题有一个很好的总结。

正如其他人在我发布这篇文章后提到的,如果你真的想表示小整数,你最好使用int8_t和uint8_t。

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

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

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

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

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

Char和unsigned Char不能保证在所有平台上都是8位类型——它们保证是8位或更大的类型。一些平台有9位、32位或64位字节。然而,今天最常见的平台(Windows、Mac、Linux x86等)都有8位字节。

摘自《c语言编程》一书:

有符号或无符号限定词可以应用于char或任何整数。无符号数 都是正的或零的,并且服从对2^n取模的算术法则,其中n是数字 类型中的位。例如,如果字符是8位,unsigned char变量就有值 在0到255之间,而有符号字符的值在-128到127之间 补机)。纯字符是有符号字符还是无符号字符取决于机器, 但是可打印的字符总是正的。