在C/C++中,
unsigned char
有什么用?它与普通的char
有何不同?如果你喜欢使用具有特定长度和符号的各种类型,那么最好使用 uint8_t
、int8_t
、uint16_t
等,因为它们完全按照其名称所述执行。
我在网上搜索到了这个,里面有人讨论过这个问题。
无符号字符基本上是一个字节。因此,如果您需要一个字节的数据(例如,可能希望将其用于设置标志以传递给函数,这在Windows API中经常发生),则可以使用它。
无符号字符使用了常规字符保留给符号的位作为另一个数字。这将把范围更改为[0-255],而不是[-128-127]。
通常情况下,当您不需要符号时,会使用无符号字符。这将在处理 char 作为字节而不是作为数字时进行位移(位移扩展符号)和其他操作时产生差异。
unsigned char
只能取正值:0到255,而 signed char
可以取正负值:-128到+127。
摘自《C程序设计语言》书中:
signed
或unsigned
限定符可用于char或任何整数。无符号数永远是正数或零,并遵守算术运算模2^n的规律,其中n是类型中的位数。因此,例如,如果chars为8位,则无符号char变量的值在0和255之间,而有符号char的值在-128和127之间(在二进制补码机器上)。普通字符是有符号还是无符号取决于机器,但可打印字符始终是正数。
signed char
和 unsigned char
都代表1字节,但它们的范围不同。
Type | range
-------------------------------
signed char | -128 to +127
unsigned char | 0 to 255
signed char
中,如果我们考虑 char letter = 'A'
,那么'A'在 ASCII/Unicode
中表示二进制的65。如果65可以存储,-65也可以存储。在 ASCII/Unicode
中没有负的二进制值,因此不需要担心负值。
示例
#include <stdio.h>
int main()
{
signed char char1 = 255;
signed char char2 = -128;
unsigned char char3 = 255;
unsigned char char4 = -128;
printf("Signed char(255) : %d\n",char1);
printf("Unsigned char(255) : %d\n",char3);
printf("\nSigned char(-128) : %d\n",char2);
printf("Unsigned char(-128) : %d\n",char4);
return 0;
}
输出:
Signed char(255) : -1
Unsigned char(255) : 255
Signed char(-128) : -128
Unsigned char(-128) : 128
char
实际上被定义为“1字节”,但是一个字节可以超过8位。 - Lover of Structure