在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之间 补机)。纯字符是有符号字符还是无符号字符取决于机器, 但是可打印的字符总是正的。