补码中有正负零吗?当然没有!每个数字都是唯一表示的啦

在一本书上看到的小思考啦。

就是说0000 0000 0000 0000 0000 0000 0000 0000是int的0.

那么1000 0000 0000 0000 0000 0000 0000 0000是什么呢?

第一位是符号位啦,那么这个岂不是-0.

错!哪有这样读负数的,读法都错了。

事实上他是一个负数喽。而且是最大的负数。

为什么呢?

那么首先想想负数是怎么求的呢?

原码按位取反加一,对吧!

这个数符号位为1,为负数。

我们来倒退回原码就好了。

减一

0111 1111 1111 1111 1111 1111 1111 1111

取反

1000 0000 0000 0000 0000 0000 0000 0000

这个就是它的正数的大小喽,但是让计算机读的话这个还是负数嘞。

他的相反数还是它本身,但它不是0,神奇吧。

所以在使用的时候要很小心不要越界嘞,否则会出现各种各样的错误喽。

#include
using namespace std;
int getbit(int n,int i)
{
    return (n>>i)&1;
}
int main()
{
    int n;
    n=0x80000000;
    n--;
    n=~n;
    n=-n;
    for(int i=31;i>=0;i--)
    {
        cout<<getbit(n,i);
        if(i%4==0)cout<<" ";
    }   
    cout<<endl; 
    cout<<n<<endl;
    return 0;
}
文章目录