在C/ c++中,unsigned char是用来干什么的?它和常规char有什么不同?
当前回答
Unsigned char只取正值:0到255 while Signed char有正负值:-128到+127。
其他回答
Unsigned char是所有比特欺骗的核心。在几乎所有平台的所有编译器中,无符号字符只是一个字节和一个无符号整数(通常为8位),可以被视为一个小整数或一组位。
此外,正如其他人所说,标准并没有定义char的符号。你有三种不同的char类型:,有符号char,无符号char。
Unsigned char只取正值....比如0到255
而
Signed char同时取正负值....比如-128到+127
有符号char和无符号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
一些人在谷歌上找到了这个,人们对此进行了讨论。
无符号字符基本上是一个单字节。所以,如果你需要一个字节的数据,你可以使用它(例如,也许你想用它来设置标志的开启和关闭,以传递给一个函数,就像在Windows API中经常做的那样)。
摘自《c语言编程》一书:
有符号或无符号限定词可以应用于char或任何整数。无符号数 都是正的或零的,并且服从对2^n取模的算术法则,其中n是数字 类型中的位。例如,如果字符是8位,unsigned char变量就有值 在0到255之间,而有符号字符的值在-128到127之间 补机)。纯字符是有符号字符还是无符号字符取决于机器, 但是可打印的字符总是正的。