繁体   English   中英

存储在 unsigned int 中的负值

[英]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)。

https://www.tutorialspoint.com/two-s-complement

当您将负数分配给 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM