Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有符号和无符号值是什么意思?_C - Fatal编程技术网

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

C 有符号和无符号值是什么意思?,c,C,有符号的在C中是什么意思?我有这张桌子要展示: 这表示signed char128到+127128也是一个正整数,那么这怎么可能是像+128到+127?或者128和+127有不同的含义吗?我指的是一本书。这张表缺了几个字。有符号字符的范围为-128到+127;表中的其他类型也是如此。符号通常表示数字前面有+或-符号。这意味着无符号int、无符号shorts等不能为负数。有符号整数可以表示负数;未签名的不能 有符号整数在溢出时具有未定义的行为,而无符号整数使用模环绕 请注意,该表不正确。首先,它

有符号的在C中是什么意思?我有这张桌子要展示:


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

这张表缺了几个字。有符号字符的范围为-128到+127;表中的其他类型也是如此。

符号通常表示数字前面有+或-符号。这意味着无符号int、无符号shorts等不能为负数。

有符号整数可以表示负数;未签名的不能

有符号整数在溢出时具有未定义的行为,而无符号整数使用模环绕


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

有符号的数字是附加了+或-的数字。 例如+2和-6是有符号的数字。 有符号的数字可以存储正数和负数,这就是为什么它们有更大的范围。 i、 e-32768至32767

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


希望对您有所帮助

有符号整数可以同时具有负值和正值。而无符号整数只能有正值

对于最常用的带符号整数,其范围为(取决于整数的位宽度):

chars->range-128-127

其中,无符号字符的范围为:


无符号字符->范围0-255

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

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

因为这都是关于内存的,所以最终所有的数值都存储在二进制中。32位无符号整数可以包含从所有二进制0到所有二进制1的值。对于32位有符号整数,它意味着它的一位(最高有效位)是一个标志,它将值标记为正或负。所以,这是解释问题,它告诉我们值是有符号的

正的有符号值的存储方式与无符号值相同,但负数的存储方式是使用2的补码方法

如果您想在二进制中写入负值,首先写入正数,然后反转所有位,最后加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

这是书中的一个打字错误;签名字符从-128变为127

有符号整数使用表示法存储,其中第一位用于指示符号

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

  • 最大的正7位数字是(0111111)b=2^7-1=127
  • 最小的负7位数字是(11111111)b=-128
    (因为11111111是10000000=2^7=128的二者的补码)

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

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

i、 e


这张表只是缺少减号。在每个数值范围的第一个数字前都应该有一个负号。谢谢大家,+1感谢在座的各位,我确信这本书有问题,这就是我困惑的地方,这本书是我指的一个无符号双精度浮点数?嗯,它比这要复杂一点。首先,没有无符号的双精度浮点运算。
有符号的数字可以存储正数和负数,这就是为什么它们有更大的范围。i、 e-32768到32767
不,它们没有更大的范围。它们有不同的范围。这就是为什么你的未签名空头一直涨到65535。
-2^(31) to 2^(31)-1
-2,147,483,648 to 2,147,483,647