补码中有正负零吗?当然没有!每个数字都是唯一表示的啦
在一本书上看到的小思考啦。
就是说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;
}