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

Hel*_*rld 18 c

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

在此输入图像描述

这说到signed char 128+127.128也正整数,所以这怎么能是这样+128+127?或者做128+127有不同的含义?我指的是Apress Beginning C这本书.

Pub*_*bby 33

有符号整数可以表示负数; 没有签名不能.

有符号整数如果溢出则具有未定义的行为,而无符号整数则使用模数进行环绕.

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


jwa*_*zko 8

默认情况下,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
Run Code Online (Sandbox Code Playgroud)