一个未签名字符是什么?

544
在C/C++中,unsigned char有什么用?它与普通的char有何不同?
16个回答

7

如果你喜欢使用具有特定长度和符号的各种类型,那么最好使用 uint8_tint8_tuint16_t 等,因为它们完全按照其名称所述执行。


4

我在网上搜索到了这个,里面有人讨论过这个问题。

无符号字符基本上是一个字节。因此,如果您需要一个字节的数据(例如,可能希望将其用于设置标志以传递给函数,这在Windows API中经常发生),则可以使用它。


4

无符号字符使用了常规字符保留给符号的位作为另一个数字。这将把范围更改为[0-255],而不是[-128-127]。

通常情况下,当您不需要符号时,会使用无符号字符。这将在处理 char 作为字节而不是作为数字时进行位移(位移扩展符号)和其他操作时产生差异。


4

unsigned char 只能取正值:0到255,而 signed char 可以取正负值:-128到+127。


3

摘自《C程序设计语言》书中:

signedunsigned限定符可用于char或任何整数。无符号数永远是正数或零,并遵守算术运算模2^n的规律,其中n是类型中的位数。因此,例如,如果chars为8位,则无符号char变量的值在0和255之间,而有符号char的值在-128和127之间(在二进制补码机器上)。普通字符是有符号还是无符号取决于机器,但可打印字符始终是正数。


2

signed charunsigned 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” 不能保证为一个字节,而“signed char”仅保证能够容纳范围[-127,127](虽然几乎所有的系统都使用二进制补码且至少能够容纳范围[-128,127]) - qwr
根据C标准,char实际上被定义为“1字节”,但是一个字节可以超过8位。 - Lover of Structure

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接