2012-11-25 128 views
14

signed在C中的含义是什么?我有此表显示:有符号和无符号值的含义是什么?

enter image description here

这是说signed char128+127128也是一个正整数,那么如何才能像+128+127?或者128+127有不同的含义?我指的是Apress Beginning C这本书。

+2

该表只是缺少减号。在每个数值范围中的第一个数字前应该有一个减号。 –

+1

谢谢大家,+1给这里的所有人,我确信这本书有什么问题 –

回答

26

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

带符号整数在未定义行为时会溢出,而无符号整数则会使用模回绕。

请注意,该表是不正确的。首先,它缺少-标志(如-128到+127)。其次,该标准不保证那些类型必须落在这些范围内。

+0

感谢您的额外信息;) –

4

该表缺少缺点。 signed char的范围是-128到+127;同样适用于桌上的其他类型。

+0

这就是我困惑的地方,这是关于 –

1

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

+0

的apress书什么是无符号的double/float? –

+0

好吧,它比这更有一点参与。首先,不存在无符号double/float这样的事情。 –

2

带符号的数字是那些带有+或者 - 的数字。 E.g +2和-6是带符号的数字。 签名数字可以存储正数和负数,这就是为什么他们有更大的范围。 即-32768到32767

无符号数字是简单的数字,它们没有符号。他们总是积极的。和他们的范围是从0到65535

希望它可以帮助

+2

'签名的数字可以存储正数和负数,这就是为什么他们有更大的范围。即-32768至32767'不,他们没有更大的范围。他们有一个_different_范围。这就是为什么你的未签名短片一路上涨到65535。 –

0

有符号整数能有正面和负面的价值观。而一个无符号整数只能有正值。

对于使用two's complement,这是最常用的带符号整数,范围是(依赖于整数的比特宽度):

char s -> range -128-127

凡无符号字符具有范围:

unsigned char s -> range 0-255

0

首先,你的表是错误的......负数缺失。参照char类型,您可以表示所有256种可能性,因为char有一个字节表示2^8。所以现在你有两个选择来设置你的范围。从-128到+128或0到255.第一个是有符号字符第二个a 无符号字符。如果您使用整数,请注意您正在使用哪种操作系统。 16位,32位或64位。 Int(16位,32位,64位)。 char始终只有8位的值。

6

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

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

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

如果要以二进制写负值,首先写入正数,然后反转所有位并最后加1.当的二进制补码中的负值被添加到具有相同幅度的正数时,结果将是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 
1

这是书中一个错字;带符号的字符从-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是2的补码10000000 = 2^7 = 128)。

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

0

所有的整数数据类型都是带符号的数据类型,即它们的值可以是正值或负值。无符号数字总是非负数。