补码的计算方式是求反加1
不论单字节还是多字节都是一样的
单字节不过是计算一个字节
多字节则是先将低字节求反加1,并将进位记下来;
然后对高字节求反,加上低字节的进位就行了
如果你的单板机支持双字节 *** 作,就更简单了,将低字节装入寄存器的低位,高字节装入高位,直接对寄存器求反加1就行了
#include<stdioh>
#include<mathh>
int main(){
int temp;
int num;
int fan;
int bu;
int absnum;
int absfan;
int absbu;
printf("please enter a number between -128~127: ");
while(scanf("%d",&temp)){//输入十进制数
if(temp<-128||temp>127) continue;
num=temp;
// printf("num=%d\n\n",num);
fan=num;
bu=num;
if(num<0){//负数处理
absnum=abs(num);//取负数的原码,即绝对值
absfan=~(absnum<<1)>>1&0x7f; //什么意思?
absbu=absfan+1;
printf("方法一负数:原码=%d,反码=-%d,补码=-%d\n",absnum,absfan,absbu);
}
return 0;
}
}
#include<iostreamh>
main()
{
char cc[8];
int a[8],b[8],i,j,c=0;
for(i=0;i<8;i++)
{
cin>> cc[i];
a[i]=b[i]=cc[i]-48;
}
if(a[0]==1)
{
cout<<"原码为:";
for(i=0;i<8;i++)//原码
cout<<a[i];
cout<<"反码为:";
cout<< "1";
for(i=1;i<8;i++)//负数反补不同
{
if(a[i]==0) //反码
cout<<"1";
else
cout<<"0";
}
cout<<"补码为:";
cout<< "1";
if(b[7]==0)
{b[7]=0;c++;}
if(c)
{
for(i=1;i<7;i++)
{
if(b[i]==0)
b[i]=1;
else
b[i]=0;
}
b[7]=0;
b[6]++;
for(i=6;b[i]==2;i--)
{
b[i]=0;
b[i-1]++;
}
for(i=1;i<8;i++)
cout<<b[i];
}
else
{
for(i=1;i<7;i++)
{
if(a[i]==0)
cout<<"1";
else
cout<<"0";
}
cout<<"1";
}
}
else
{
cout<<"原码为:";
for(i=0;i<8;i++)//正数原反补一样
cout<<a[i];
cout<<"反码为:";
for(i=0;i<8;i++)
cout<<a[i];
cout<<"补码为:";
for(i=0;i<8;i++)
cout<<a[i];
}
}
以上就是关于双字节数取补码的程序,求分析怎么会是这样的全部的内容,包括:双字节数取补码的程序,求分析怎么会是这样的、用VC++编写一个求一个字节的整数和小数的原码,反码,补码程序、c++编写求一个字节的小数的原码,反码,补码程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)