您的位置:首页 > 其它

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

2018-02-01 12:04 531 查看
在一本书上看到的小思考啦。

就是说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<iostream>
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐