负数如何用32位有符号整数表示? 它是两个还是一个补码?或者左边的最后一点就像一面旗帜? 例如:( - 10)
答案 0 :(得分:17)
如今大多数计算机都使用two's complement来表示签名整数,但它可能因硬件架构,编程语言或其他特定于平台的问题而异。
对于二进制补码表示,最重要的(“最左边”)位称为符号位,它将被设置为负整数并且清除为非负整数。然而,它不仅仅是一个“旗帜”。有关详细信息,请参阅Wikipedia article。
答案 1 :(得分:4)
通常它是两个补码。
答案 2 :(得分:4)
来自C99标准:
对于有符号整数类型,其位数为 对象表示应为 分为三组:价值位, 填充位和符号位。那里 不需要任何填充位;那里 应该是一个符号位。每 作为值位的位应具有 与同一位相同的值 对象表示 相应的无符号类型(如果有的话) 是有符号类型中的M值位 和N在无符号类型中,则M = N)。如果符号位为零,则应为 不影响结果值。如果 符号位是1,值应为 通过以下方式之一进行修改:
- 带符号的对应值 位0被否定(符号和幅度);
- 符号位的值为 - (2N) (二的补充);
- 符号位的值为 - (2N - 1) (补充)。
以下哪项适用 实现定义,是否 符号位1和全部的值 值位零(对于前两个), 或者使用符号位和所有值位1 (对于那些补充),是一个陷阱 表示或正常值。在 符号和幅度的情况 如果是这样,那就是补充 表示是一个正常的值 称为负零。
答案 3 :(得分:3)
我认为答案是0110
,之前重复了28次,因此它看起来像:
1111 1111 1111 1111 1111 1111 1111 0110;
步骤:
10的位表示是:
0000 0000 0000 0000 0000 0000 0000 1010;
0->1
和1->0
:
1111 1111 1111 1111 1111 1111 1111 0101;
在最后一位加1,并传播到前面的位,完成!
1111 1111 1111 1111 1111 1111 1111 0110;
===
您可以通过添加10进行验证,并且所有位都将获得0。如上所述,它是基于2的,并且遵循两个补码。
答案 4 :(得分:1)
0xFFFFFFFF = -1
0xFFFFFFFE = -2
0xFFFFFFFD = -3
...
&安培;等等
答案 5 :(得分:0)
最高有效位(左边的最后一位)设置为负数。
答案 6 :(得分:0)
仅供参考:website.DateCreated '
website.author 'As New Values(Of Organization, Person)
-> negation
。
以adding one
为例,引用wiki的8位
5
有一个技巧可以将数字从正数转换为负数,反之亦然:
添加它们而忽略其有符号位(最左边的位)将得到to convert 5 to -5: 0000 0101 - flip -> 1111 1010 - add one -> 1111 1011
(其中N是代表数字的位数)。
如上面在 8位中的示例所示,2^N
和5 (0000 0101)
的总和为-5 (1111 1011)
,即(2 ^ 8)。