在C/ c++中,unsigned char是用来干什么的?它和常规char有什么不同?
当前回答
Signed char的范围是-128到127;Unsigned char的范围是0到255。
根据编译器的不同,Char将等价于有符号Char或无符号Char,但它是一种不同的类型。
如果你使用c风格的字符串,只使用char。如果需要使用字符进行算术运算(非常少见),请显式指定signed或unsigned以实现可移植性。
其他回答
Char和unsigned Char不能保证在所有平台上都是8位类型——它们保证是8位或更大的类型。一些平台有9位、32位或64位字节。然而,今天最常见的平台(Windows、Mac、Linux x86等)都有8位字节。
unsigned char是一个无符号字节值(0到255)。你可能认为char是一个“字符”,但它实际上是一个数值。常规字符是带符号的,因此有128个值,这些值映射到使用ASCII编码的字符。但无论哪种情况,您在内存中存储的都是字节值。
有符号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中经常做的那样)。
Unsigned char是所有比特欺骗的核心。在几乎所有平台的所有编译器中,无符号字符只是一个字节和一个无符号整数(通常为8位),可以被视为一个小整数或一组位。
此外,正如其他人所说,标准并没有定义char的符号。你有三种不同的char类型:,有符号char,无符号char。