[英]negative value stored in unsigned int
我们知道如果我们想将num=-1
存储在 32 位有符号整数中,它的位表示将看起来像1000 0000 0000 0000 0000 0000 0000 0001
但如果我喜欢这个num=-1
unsigned int num1 = num
那么 num1 位表示将看起来像1111 1111 1111 1111 1111 1111 1111 1111
。
我们也知道在 unsigned int 中 msb 不代表符号,它有助于幅度,我想知道为什么在 num1 表示中都有一个我如何预测 unsigned int 中 -2 的值
注意我正在尝试使用 cpp 语言进行所有操作
#include<bits/stdc++.h>
using namespace std;
int main(){
unsigned int num = -1;
///i want to know what will be the bit representation of num=-2
while(num){
cout<<(num&1);
num>>=1;
}
}
正如您所说,无符号整数的 MSB 对幅度有贡献,所有其他位也是如此。 您可以看到,因为unsigned int num1 = -1
给出了1111 1111 1111 1111 1111 1111 1111 1111
,这是最大可能的无符号值 (2^32)。 -2 实际上是num1 - 1
。 因此,您只需减去 1 即可得到1111 1111 1111 1111 1111 1111 1111 1110
(2^32 - 1)。
当您将负数分配给 unsigned int 时,如您所说,第一位是符号位,另一位是数字的二进制,例如二进制表示 -2 是 1000 0000 0000 0000 0000 0000 0000 0010 unsigned int 得到两个完整的这个数字。如果你想将带符号的二进制从第一个 1 从右边转换为二进制的完整,除了有符号的位之外,每个位都没有,所以 -2 的二进制应该是 1111 1111 1111 1111 1111 1111 1111 1110。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.