求补码的函数可以参考下面的代码,我们知道,在内存中,正数的补码等于他本身,所以直接返回a。负数的补码正是它在内存中的存在形式,这是我们定义一个unsigned int型的数值去用它来赋值,取得的就是他的补码的二进制形式。为了验证,我另外编写了一个函数,用来输出二进制,请参考。
unsigned int buma(int a)//用来求得补码
{
if(a>=0)
return a;
else
{
unsigned int temp=a;
return temp;
}
}
void twoprint(unsigned int a)//用来输出二进制
{
int temp=a%2;
if(a/2==0)
{
cout< }
twoprint(a/2);//这里采用了递归调用的方法
cout<
在计算机中,并无原码或反码。
输入的数值,无论正负,经过编译,都是以补码存放的。
编写 C 语言程序,显示数值的二进制,如下即可。
7的二进制0000
0000
0000
0111,~是按位反,结果是 1111
1111
1111
1000
注意最高位是1,说明这是个负数,负数在计算机中是补码,补码是十进制多少呢,把补码负号不变,其它取反,最后加1,这个就是原码.即1000
0000
0000
0111+1
=1000
0000
0000
1000是-8 公式~n
结果是
-(n+1)
位运算