如果char和signed char的范围都是-127至127,那么signed char的目的是什么?我们在什么情况下使用signed char而不是仅使用char?
unsigned char
是无符号的。
signed char
是有符号的。
char
可能是无符号的或有符号的,这取决于您使用的平台。
当您确实需要有符号性时,请使用signed char
。
可能相关的问题:char带有符号表示什么意思?
gcc
和gcc -funsigned-char
可能被认为是不同的实现时,这同样令人困惑。它在平台上是一个特定的函数,因为它可能会影响ABI。虽然通常情况下不会,因为使用2的补码可以将相应的有符号和无符号类型视为相同,所以平台释放了编译器去做任何事情。所以我会说它绝对取决于所有它所依赖的东西 :-) - Steve Jessop对于普通的char
,它是否使用与signed char
或unsigned char
相同的表示法是实现定义的。因为普通的char
没有明确定义,所以引入了signed char
。此外,你需要向读者传达以下信息:
char
:字符数据signed char
:小整数unsigned char
:原始内存(如果你要执行大量位运算,也可以使用unsigned char
。但在实践中,这往往与原始内存使用重叠。)
看到lamia,
首先我要为你的问题做一些背景准备。
................................................
char数据类型有两种类型:
无符号字符;
有符号字符;
(即整数数据类型)
................................................
不同书籍的解释如下:
char 1字节 -128到127(即默认为有符号字符)
signed char 1字节 -128到127
unsigned char 1字节 0到255
................................................
还有一件事,1字节=8位(零到第7位)
由于处理器标志寄存器保留第7位来表示符号(即1=+ve和0=-ve)
-37将被表示为1101 1011(最高有效位为1),
+37将被表示为0010 0101(最高有效位为0)。
................................................
类似地,对于字符,最后一位默认为有符号位
为什么?
因为字符也取决于特定字符(例如A=65)的ASCII码。
在任何情况下,我们都使用char并仅使用7位。
在这种情况下,为了将char / int的内存范围增加1位,我们使用无符号char或无符号int;
感谢您的问题。
char
是 signed char
。char
永远不会 是 signed char
。它们是两个独立的类型。然而,在许多系统上,char
具有带符号的底层表示,使它们在实践中可以互换。 - Lightness Races in Orbitchar *
和signed char *
之间没有隐式转换。您必须始终进行显式或转换为void *
并让编译器执行第二次转换。 - R.. GitHub STOP HELPING ICEunsigned char a = 12
和 signed char a = 12
,存储的位模式有什么区别? - Suraj Jain
CHAR_BIT
等于8
时才成立! - Lightness Races in Orbit[2003: 3.9.1/7]
“类型bool、char、wchar_t以及有符号和无符号整数类型被称为整数类型。整数类型的同义词是整型。整数类型的表示应使用纯二进制计数系统来定义值。[例如:这个国际标准允许使用2的补码、1的补码和带符号的幅度表示整数类型。]" - Lightness Races in Orbit