signed
在C中意味着什么?我有这张表显示:
这表示signed char
128
到+127
。 128
也是一个正整数,那么这怎么可能是+128
到+127
?或者128
和+127
有不同的含义吗?我指的是Apress Beginning C一书。
答案 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表示负数(以二进制补码表示)。
无符号字符没有符号,因此可以使用所有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