基础知识:
对于正数
正数:原码=反码=补码

对于负数:
原码->补码 和 补码->原码 的规律一样,都是 “取反加1”
eg:以 -3 为例(前面的1,是符号位,0为正,1为负。不参与运算)
原码->补码:111(原码)=100(反码)=101(补码)
补码->原码:101(补码)->110->111(原码)

#define BitNum   8           /*实现的是32位的转化*/
#define DateType int/*
参数:num:            要做转化的数值
参数:code  :         存放得到的二进制数组
参数:bit Num:        数据的位数
参数:cur_iter_num:    递归的次数,初值是0
*//*作用:将源码转成补码*/
void findNegCode_iter(DateType num, char * code, int bitNum, int cur_iter_num)
{/*递归的终止条件*/if(cur_iter_num == bitNum)   return;/*递归的操作*/    /*三目运算符*//*用数组存放  要转化的数值的   每一位的值(位于操作)*/code[cur_iter_num] = (num & (1<<(BitNum-1-cur_iter_num))) == 0?'0':'1';findNegCode_iter(num,code,bitNum,cur_iter_num+1);
}/*作用:将10进制数转化成二进制输出*/
void findOriCode(DateType num,char *code,int bitNum)
{//  findNegcode(num,code,bitNum);findNegCode_iter(num,code,bitNum,0);/*递归终止条件*/if(num>0)   return;/**/// findNegcode(num*(-1),code,bitNum);findNegCode_iter(num*(-1),code,bitNum,0);code[0] = '1';
}/* 将二进制数转成10进制数*/
int changeDate(char *str)
{int sum =0;int j = 1;/*用作循环上限*/int pos = BitNum - 1;for(;pos>=0;pos--){/*刚开始,pos最大,对应的是数组的最右边*/sum += (str[pos]-'0')*j;j *= 2;}return sum;
}int main()
{int Oriresult = 0,Negresult = 0;char OriCode[BitNum + 1] = { 0 };char NegCode[BitNum + 1] = { 0 };/*源码转补码   输入10进制源码,返回二进制补码*/findNegCode_iter(96,NegCode,BitNum,0);/* 将二进制数转成10进制数*/Negresult = changeDate(NegCode);printf("Negresult = %d\n",Negresult);/*原码的补码 二进制输出*/findOriCode(Negresult, NegCode, BitNum);printf("Negresult=%s\n", NegCode);/*补码转原码   输入10进制补码,返回二进制原码*/findNegCode_iter(74,OriCode,BitNum,0);/* 将二进制数转成10进制数*/Oriresult = changeDate(OriCode);printf("Oriresult = %d\n",Oriresult);/*补码对应的原码二进制输出*/findOriCode(Oriresult, OriCode, BitNum);printf("Oriresult=%s\n", OriCode);return 0;
}

任意位宽的补码转原码,原码转补码相关推荐

  1. 原码、反码、补码及位操作符,C语言位操作

    计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...

  2. 6位有符号补码阵列乘法器_C/C++学习日记:原码、反码和补码

    一.什么是原码.反码和补码 我们知道,在计算机内部存储的带符号数都是以补码形式存储,用补码形式进行运算的.什么是一个数的补码?为什么要用补码?这要从数的原码.反码开始讲.我们以整型数为例,且假定字长为 ...

  3. 原码一位乘法器设计_对原码、反码和补码的加深理解

    我们知道计算机语言可以简单概括为三类,分别是机器语言.汇编语言和高级语言.机器语言是由二进制组成的编码,由无数个0和1组成.在二进制系统中,每个0或1就是一个位,而位是数据存储的最小单位,可称之为比特 ...

  4. java取二进制其中两位_Java:二进制(原码、反码、补码)与位运算(示例代码)...

    一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码 ...

  5. 位运算(按位与、按位或、异或、取反)以及原码、反码、补码

    参考:运算符的计算(按位与 按位或 异或 取反) 作者:一只青木呀 发布时间: 2020-07-23 18:13:55 网址:https://blog.csdn.net/weixin_45309916 ...

  6. 原码一位乘法器设计_十分钟带你彻底搞懂原码、反码、补码

    点击上方"程序员大白",选择"星标"公众号 重磅干货,第一时间送达 编辑 | 程序员大白公众号来源丨https://www.cnblogs.com/zhangz ...

  7. java反码_Java:二进制(原码、反码、补码)与位运算

    一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码 ...

  8. 8位二进制数的原码、反码、补码以及它能表示的范围

    ===================================================================================== 1.正数的反码和补码都与原码 ...

  9. 8位可控加减法电路设计_C++手撕底层:位、字节、原码、反码、补码的深入理解...

    最近小编在写C++编码转换的问题,都快被弄疯来,看来很多资料感觉自己在计算机变成底层这一块不是很熟练,所以恶补来一下,这边总结出来给大家分享. 大家都知道计算机只认识0和1,但是0和1对人又不友好,怎 ...

最新文章

  1. Linux中如何添加/删除FTP用户并设置权限
  2. Linux安装python-3.8
  3. boost::fusion::traits用法的测试程序
  4. 当TFS/VSTS遇上Power BI
  5. mysql数据库安装教程32位,看这一篇就够了!
  6. poj 2395 prime的递归实现
  7. OLTP和OLAP是什么
  8. Java事务之八——分布式事务(Spring+JTA+Atomikos+Hibernate+JMS)
  9. c语言宿舍管理系统程序,C语言——学生宿舍管理系统
  10. 基于MATLAB的人眼开度疲劳检测识别
  11. 联想笔记本触摸板失灵的一个原因及解决方法
  12. Windows 7 新功能 - AppLocker
  13. Nape的回调系统 nape.callbacks
  14. vivo 5G旗舰机真的要来了?新商标好抢眼!
  15. 基于STC89C51单片机的温湿度检测系统
  16. 在.NET中操作XmlDocument,XmlReader的方法
  17. 《Kubernetes故障篇:Kubernetes Node节点DiskPressure异常处理》
  18. 解决json数据 key为数字,自动排序问题
  19. 三小时,阿里云使用docker部署redis(阅文无数)
  20. 苦涩又难懂的io<3>

热门文章

  1. BIOS自检与开机故障相关的详尽问答集
  2. ASCII(美国信息交换标准编码)表
  3. xp职称计算机考试题库,全国职称计算机考试题库(WindowsXP模块)
  4. 磁盘磁带光盘是计算机系统中,磁盘、磁带和光盘是计算机系统中最常用的( )
  5. 关于PyQt5在Label标签插入图片并且实现图片的拖拽和缩放
  6. 富士施乐Fuji Xerox Phaser 6700 驱动
  7. .NET控件集ComponentOne 2018V3发布:新增图表动画及迷你图
  8. Option 82在校园网的应用与实现(转)
  9. u校园刷题脚本一键答题挂时长支持视听说读写综合
  10. CSS系列之CSS选择器