有符号和无符号值是什么意思?

时间:2012-11-25 17:50:58

标签: c

signed在C中意味着什么?我有这张表显示:

enter image description here

这表示signed char 128+127128也是一个正整数,那么这怎么可能是+128+127?或者128+127有不同的含义吗?我指的是Apress Beginning C一书。

9 个答案:

答案 0 :(得分:33)

有符号整数可以表示负数;无符号的不能。

如果有符号整数溢出,则它们具有未定义的行为,而无符号整数使用模数包围。

请注意,该表格不正确。首先,它缺少-个符号(例如-128到+127)。其次,该标准并不保证必须属于这些范围。

答案 1 :(得分:8)

默认情况下,C中的数值是有符号的,这意味着它们既可以是负数也可以是正数。另一方面,无符号值不允许使用负数。

因为它只是关于内存,所以最后所有数值都以二进制形式存储。 32位无符号整数可以包含从所有二进制0到所有二进制1的值。当涉及到32位有符号整数时,它意味着它的一个位(最重要的)是一个标志,它将值标记为正或负。所以,它是解释问题,它告诉价值已经签署。

正值有符号值的存储方式与无符号值相同,但使用二进制补码方法存储负数。

如果要在二进制中写入负值,首先写入正数,然后反转所有位,最后加1。当 2的补码中的负值添加到正数时相同幅度,结果将为0。

在下面的示例中,我们可以处理8位数字,因为它很容易检查:

positive 95: 01011111
negative 95: 10100000 + 1 = 10100001 [positive 161]
          0: 01011111 + 10100001 = 100000000
                                    ^
                                    |_______ as we're dealing with 8bit numbers,
                                             the 8 bits which means results in 0

答案 2 :(得分:4)

该表缺少这些缺点。签名字符的范围是-128到+127;同样适用于桌面上的其他类型。

答案 3 :(得分:2)

签名号码是附加+或 - 的号码。 E.g +2和-6是带符号的数字。 签名数字可以存储正数和负数,这就是为什么它们具有更大的范围。 即-32768至32767

无符号数字只是数字,没有任何符号。他们总是积极的。它们的范围是0到65535。

希望有所帮助

答案 4 :(得分:2)

这是书中的一个错字; signed char从-128到127。

使用two's complement表示存储有符号整数,其中第一位用于表示符号。

在C中,字符只是8位整数。这意味着它们可以从 - (2 ^ 7)变为2 ^ 7 - 1.这是因为我们使用数字的最后7位和符号的第一位。 0表示正数,1表示负数(以二进制补码表示)。

  • 最大正7比特数是(01111111)b = 2 ^ 7 - 1 = 127。
  • 最小的负7位数是(11111111)b = -128
    (因为11111111是10000000的两个补码= 2 ^ 7 = 128)。

无符号字符没有符号,因此可以使用所有8位。从(00000000)b = 0到(11111111)b = 255.

答案 5 :(得分:1)

签名通常表示该数字前面有一个+或 - 符号。这意味着unsigned int,unsigned short等不能为负。

答案 6 :(得分:0)

有符号整数可以包含负值和正值。无符号整数只能有正值。

对于使用最常用的two's complement的有符号整数,范围是(取决于整数的位宽):

char s -> range -128-127

unsigned char的范围为:

unsigned char s -> range 0-255

答案 7 :(得分:0)

首先,你的表错了......缺少负数。引用char类型....你可以表示所有256种可能性,因为char有一个字节意味着2 ^ 8。所以现在你有两种方法可以设置你的范围。从-128到+128或0到255.第一个是签名字符,第二个是 unsigned char 。如果使用整数,请注意您正在使用的操作系统类型。 16位,32位或64位。 Int(16位,32位,64位)。 char总是只有8位值。

答案 8 :(得分:0)

没人提到这一点,但表中的int范围是错误的: 它是

-2^(31) to 2^(31)-1

即,

-2,147,483,648 to 2,147,483,647