什么是原码、反码、补码?

原码 - 把一个数根据正负直观翻译成二进制
方法:对于一个有符号数的二进制位,最左边是符号位,正数用0表示,负数用1表示,其它位为数值位。

例如:
char a = -10; // 原码: 10001010
char b = 10; // 原码:00001010

反码- 原码符号位不变,其它位按位取反

注意: 对于0和正数来说,不存在反码和补码,或者说0和正数的原码、反码、补码都是一样的,都是原码。(这跟计算机原理有关,在下一个部分说明)

例如:
char a = -10; // 反码:11110101

补码 - 反码+1

例如:
char a = -10; // 补码:11110110

对于0和正数来说,反码和补码都与原码一样

例如:
char b = 10; // 原码:00001010 反码:00001010 补码:00001010

为什么会有反码和补码?

数据在计算机中都是以补码的形式存储的,原因是计算机只能执行加法运算,不能执行减法运算,计算机中是用加法运算来模拟减法运算的。两个数相减在直观理解上就等价于被减数加上减数的相反数(a-b <==> a+(-b)),这样就可以进行减法操作了。
那么问题来了,为什么用补码表示负数可以起到相减的效果?
我们举个例子来看:

在10进制下  10 - 1 = 9
10 + (100- 1) <==> 10 + 99 =1 09   109对10取模等于9
上式中,(100-1)就相当于1的"补码"
那么类似的,在2进制下
10 - 1 <==> 10 + (-1) <==> 0000 1010 + 1111 1111 = 1 00001001 <==> 9
在计算机中,上面运算结果最左边的1会被省略掉,这就相当于刚才10进制下的取模一样。

实际应用中如何快速转换

在日常应用中,掌握负数的原码和补码之间的快速转换就行,就一句话:

符号位不变,其它位按位取反再加1

不管是原码转补码还是补码转原码都是这个方法。那么为什么这么转换呢?
因为:原码+补码=0,就好比在逻辑上实现a+(-a)=0。
1+99=100,但我们要是把这个运算只当作两位数运算的话,省去最高位,就剩下0了,或者说100对10取模等于0。
现在回到计算机中,如果数据只占8个位,那么超出8个位的数就会被省略,就跟取模一样。举例来看1+(-1) <==> 00000001 + 11111111 = 1 00000000 去掉最高位正好为0,所以11111111就是-1的补码,就是-1的原码的符号位不变其它位按位取反再加1.

以上都是我个人基于网上的资料和定义对于原码、反码和补码的理解,如果有不正确的地方,感谢指正!

C语言_原码、补码、反码相关推荐

  1. C语言学习-原码、反码、补码(内含计算工具)

    C语言学习-原码.反码.补码 原码反码补码计算工具:[一个工具箱](http://www.atoolbox.net/Tool.php?Id=952) 有符号位数据存储 原码.反码.补码 原码 反码 补 ...

  2. c语言原码 补码 反码,C语言 原码--反码--补码

    //原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...

  3. c语言实现单字节反码,C语言之原码、反码和补码

    原码.反码和补码 1).数据在内存中存储的时候都是以二进制的形式存储的. int num = 10; 原码.反码.补码都是二进制.只不过是二进制的不同的表现形式. 数据是以补码的二进制存储的. 2). ...

  4. java反码补码原码作用_java原码补码反码关系解析

    本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下 原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式 反码:把原码的二进制统统反过来,0变成1,1变成0 补码:负数的反 ...

  5. 真值 原码 补码 反码 移码

    真值 原码 补码 反码 移码 真值是相对与其它四种的数字类型 书写中一般表示的数叫做"真值" 机器中编码表示的数 "机器数||机器码<原码 补码 反码 移码 > ...

  6. 计算机组成原理:原码,补码,反码,移码

    无符号数 寄存器的位数反映和决定无符号数的表示范围 比如八位的寄存器就只能储存十进制的0-255 有符号数 机器数与真值 在计算机当中没有硬件表示小数点的位置,而小数点的位置是我们自己约定的, 小数的 ...

  7. 原码 补码 反码的转换

    正数 : 原码 补码 反码都相同 机器数:+1001010 原码:01001010 (符号位 正数为0) 补码:01001010 (补码与原码相同) 反码:01001010 (反码与原码相同) 负数 ...

  8. 原码 补码 反码 移码

    目录 原码 反码 补码 移码 转换 原码 补码 反码 原码 0和1组成 正负用0和1表示(添加在最前面) 真值转原码 转化符号位 数值位十进制转二进制 对于十进制数 233(正数) 正数->符号 ...

  9. 计算机组成原理之 原码 补码 反码

    原码 补码 反码 前言 一.有符号数 1.1原码 补码 反码 总结 前言 在计算机中一般使用二进制表示各个有理数.在计算机中参与运算的数有两大类:有符号数和无符号数.无符号数就是没有符号的数,在寄存器 ...

最新文章

  1. 别再说学习无趣了,跟你分享这 8 条 Python 奇技淫巧!
  2. JDK14性能管理工具:Jconsole详解
  3. 详细介绍 安装ns3步骤
  4. python json库安装_jsonc库的安装以及简单使用
  5. 2019年2月25日 Range Sum of BST
  6. k8s核心技术-Controller(Deployment)_概述和应用场景---K8S_Google工作笔记0028
  7. 宋体、代码-iOS网络编程实践--NSStream实现TCP Socket iPhone客户端-by小雨
  8. 北京科技大学计算机博士统考,北京科技大学计算机与通信工程学院2016年博士录取方案...
  9. ycl-django网站搭建(持续更新中)
  10. win 10卸载mysql_Windows 10系统下彻底删除卸载MySQL的方法教程
  11. WordPress 如何判断访客浏览器显示不同内容
  12. 指向字符串的指针 ------ 字符串指针
  13. 浅析向上转型和向下转型
  14. 使用VBA在Office中输入特殊字符(1/3)
  15. 获取图片某一点的rgb色值
  16. Qt文件QFile 和文件夹QDir
  17. js 鼠标移入移出事件
  18. RFID电子标签的七大特点
  19. ue4 迁移模型_UE4模型整体导入流程
  20. 满分室间质评之GATK Somatic SNV+Indels+CNV+SV(上)

热门文章

  1. 关于win10 explorer.exe重启问题
  2. 设文件F1的当前引用计数值为1,先建立F1的符号链接(软链接)文件F2,再建立F1的硬 链接文件F3, 然后删除F1。此时, F2和F3的引用计数值分别是多少?
  3. Linux Command ipmitool
  4. 关窗户和代码——学习12字原则:授之以欲,受之以愉,渔之以渔
  5. Flowable入门系列文章10 - 基本配置四
  6. Python Excel数据查找
  7. 2020 前端必看 20个最好的 前端 Web开发工具
  8. 单词统计,并按顺序打印 python
  9. shell的四则混合运算
  10. 欣然注册CSDN网站