双字节数取补码的程序,求分析怎么会是这样的

双字节数取补码的程序,求分析怎么会是这样的,第1张

补码的计算方式是求反加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++编写求一个字节的小数的原码,反码,补码程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9968620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存