C语言,二进制数转化为无符号十进制数,补码转化为有符号十进制数---全网最易懂,最简单的方法

 首先我们知道求一个有符号十进制数的补码有很多种方法。

正十进制数的补码与我们的原码和反码的值相同。

负十进制数的补码:

法一:

(负数的)反码+1;

负数的反码:即符号位为1,数值位为原码数值位取反(0 -> 1,1 -> 0)

法二:

将正数的原码,从右往左看,遇到的第一个1,与它右边的数保持不变,左边的数按位取反。

例如:        +75(10)=0 1 0 0 1 0 1 

                -75(10)=1 0 1 1 0 1 0 1

法三:
 

-1286432168421
+86(10)01010110
-86(10)10101010

 -86(10)=-128+32+8+2

注意这里我们将最高位128进行取负计算。 


我们接下来也会根据法三来进行补码转化为有符号十进制数的操作

例:

unsigned char binaryInteger [] = {1 ,0 ,1 ,1 ,1 ,1 ,0 ,1};
1.将二进制整数转换为无符号十进制整数;
2.使用补码将二进制整数转换为有符号十进制整
#include<stdio.h>
#include<math.h>
int main(){
	unsigned char binaryInteger [] = {1 ,0 ,1 ,1 ,1 ,1 ,0 ,1};
	int s,i,j;
	int length= sizeof(binaryInteger)/sizeof(unsigned char);
	for( i = length-1,j=0 ; i >= 0; i--,j++){
		
		s = s + binaryInteger [i]* pow(2,j);
	}
	printf("无符号十进制整数为%d",s);//189
	
	//有符号的二进制补码转化为十进制 
   	if(binaryInteger [0]==1){//符号位为1 
   		s=0;
   		for(i=length-1,j=0;i>0;i--,j++){
   			s+=binaryInteger [i]* pow(2,j);
		   }
   		s=s-binaryInteger [0]*pow(2,length-1);//符号位计算时取负值 
	   }else{
	   //符号位为0 
	   		s=0; 
		   for( i = length-1,j=0 ; i >= 0; i--,j++){
			s = s + binaryInteger [i]* pow(2,j);
	}
	   }
	printf("有符号十进制为%d",s);//-67
}

注:如果这里是用户输入,只需要定义一个数组,用for循环配合scanf'往里面填充数值就可以了。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么时候养猫猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值