原码补码与反码

【README】

1.本文内容总结自“哈工大刘宏伟”老师的mooc视频《计算机组成原理》on bilibili;

2.为了便于理解,本文引入了逗号分割符号部分和数值部分,计算机存储数据的时候没有逗号;


【1】原码表示法

原码定义: 原码是真值保存在计算机当中的数据格式,包括寄存器,内存等;其数值位数是有限的(超出的部分会被丢弃)

例子:

  1. 正整数原码: x=+1110 ;x原 = 0,1110 (符号和数值通过逗号隔开)
  2. 负整数原码: x=-1110 ;x原 = 10000 - (-1110) = 1,1110;(符号和数值通过逗号隔开)
  3. 正小数原码:x=+0.1101;x原=0.1101 (符号和数值通过小数点隔开)
  4. 负小数原码:x=-0.1101 ;x原=1 - (-0.1101)  = 1.1101 (符号和数值通过小数点隔开)

【2】补码表示法

补码定义: 为了把加法和减法合并为加法(归一化),即为了简化算术逻辑单元(ALU)的设计,引入补码让计算机只做加法(把减法转换为加法)

例: x - y = x + (y)的补码; 这样就可以把减法转换为加法;

补充: CPU = ALU + CU; 中央处理器=算术逻辑单元 + 控制单元;

【引入补码的背景】

 以时钟为例:现在是6点;要想时钟走到3点,有两种方法:

  • 方法1: 逆时针拨动3个单元(减3);
  • 方法2: 顺时针拨动9个单元(加9);

以上两种方法的效果一样(3与9之和为12,mod12),借助以上实例,容易理解补码;

注意:负小数点补码都是取模2

为啥是模2,因为负整数x的补码是 2^(n+1) + x ,其中n为整数数值部分位数; 又负小数的整数位数为0,所以负小数的补码等于 2^(0+1)+x = 2+x ;

以上公式模拟推导过程(转自视频截图):

问题: -1011的补数为+0101; 那 +0101表示的是 -1011的补数,还是+0101本身呢?

解决方法:

正数+0101 表示为 0,0101 (符号位,数值部分)正数补码添上1个0;

负数-1011 表示为 1,0101 (符号位,数值部分)负数补码添上1个1 ;

【负数】如何实现在负数补码的符号位设置为1经观察发现(也可以通过数学归纳法证明出来)负数加上2^(n+1) 得到其补码;n为原码的位数

取模2^(n+1) ;n=数值位数;

2^(4+1) - 1011=1,0101 ;计算过程如下:

100000

-1011

 =11111 – 1011 + 1 = 10100 + 1 = 10101 ;而补码10101是真值-1011的原码1,1011 的数值部分每位取反(得到10100),末位加1获得的;

【正数】补码也可以通过加上 2^(n+1) 来计算补码

如正数真值=+1011

01011

  +100000

  =101011

红色1被丢弃

【求补码的快捷方式】

计算补码快捷方式当真值为负数(注意是负数),原码符号位不变,数值部分每位取反,末位加1即可得到补码;

例子:

  1. 正整数补码:x=+1000110; x原=0,1000110;x补=0,1000110
  2. 负整数补码:x=-1010;x原=1,1010;x补=1,0110
  3. 正小数补码:x=+0.1010;x原=0.1010;x补=0.1010
  4. 负小数补码:x=-0.1010;x原=1.1010;x补=1.0110

例子2:已知 x补 = 0.0001 ,求x(真值);

  • 因为 x补=x;所以x=+0.0001

例子3:已知 x补=1.0001;求x(真值) ?

  • 因为x补=2+x;
  • 所以x(真) = x补 - 2 = 1.0001 - 10.0000 = -(10.0000 - 1.0001) = -0.1111
  • 所以 x真=-0.1111 ;x原=1.1111 ;x补=1.0001 ;

通过观察(或数学归纳法证明),我们发现:

  1. 补码转原码快捷方式:当真值为负数,则补码符号位不变,数值部分每位取反,末位加1得到原码;
  2. 原码转补码快捷方式:当真值为负数,则原码符号位不变,数值部分每位取反,末位加1得到补码;
  3. 若X为负数,则【-X】补=【X】补的符号位取反,数值各位取反末位加1;

第3点,以X= -5 为例;

5的补码,原码均为 0,0101 ;即【5】补=0,0101

-5的补码等于 1,【-5】原码=1,0101 符号位不变,数值部分每位取反,末位加1,得到

【-5】补=1,1011;

得出:【-5】补等于【5】补的符号位取反,数值各位取反末位加1 得到; 


【3】反码

反码: 和补码类似,把减法转换为加法;

通过观察(或数学归纳法证明),我们发现:

  1. 反码转原码快捷方式:当真值为负数,则补码符号位不变,数值部分每位取反得到原码(末位不需要加1);
  2. 原码转反码快捷方式:当真值为负数,则原码符号位不变,数值部分每位取反得到补码(末位不需要加1);

例子:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一篇 Entity Framework Plus 之 Audit

一般系统会有登陆日志,操作日志,异常日志,已经满足大部分的需求了。但是有时候,还是需要Audit 审计日志,审计日志,主要针对数据增,改,删操作数据变化的记录,主要是对数据…

本想试试看,结果却拿到了京东的Offer

转载自 本想试试看,结果却拿到了京东的Offer 最近,春招已经基本接近尾声了,我找了几位拿到名企Offer的粉丝,请他们总结了面试经验,近期会分批的推送给大家。希望给那些正在准备秋招的同学提供些帮助。 今天给大家分享的…

ping 命令使用代理_网络检测知识篇:ping命令使用知识,你知道几点?

Ping命令其实是一个非常好的网络故障诊断工具,相信阅读完本文对大家一定有些帮助。如果大家网络遇到问题,不妨试试以下方法。首先使用Ping命令诊断本地TCP/IP协议是否安装正常,检测方法如下:从电脑开始里找到运行,快捷…

8.4-中断系统小结(cpu中断七个问题)

【README】 本文转自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】中断介绍 1)作用:用中断系统实现了外设数据的输入输出; 还可以用于程序调试&…

第二篇 Entity Framework Plus 之 Query Future

从性能的角度出发,能够减少 增,删,改,查,跟数据库打交道次数,肯定是对性能会有所提升的(这里单纯是数据库部分)。 今天主要怎样减少Entity Framework查询跟数据库打交道的次数&#…

python长整数相乘_python写的大整数相乘的方法

输入72106547548473106236 982161082972751393 两个大整数输出结果70820244829634538040848656466105986748解题思路首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python&#xff0c…

Java Web应用的代码分层最佳实践

转载自 Java Web应用的代码分层最佳实践代码分层,对于任何一个Java Web开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。从另外一个角…

中断屏蔽技术

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】中断屏蔽 1,中断屏蔽的意思是,在中断1的服务程序执行过程中,不允许被其他中断…

.NET FM的未来计划

2016年3月21日,我们启动了.NET FM这档独立播客来服务中文.NET和微软技术社区。如同早先感谢信所言,能够得到社区的肯定和全力支持,二位主播是受宠若惊。关于未来的计划,下面简单和大家分享一下。 首先,关于节目播出频率…

Java开发必须掌握的日志分析命令

转载自 Java开发必须掌握的日志分析命令 对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很…

指令寻址方式与数据寻址方式

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2. cpu访存寄存器耗费 10ns,访问缓存(高速缓冲寄存器)耗费20ns,访问主…

python oj 输入_Python写OJ题时输入问题

# encoding: utf-8Created on Nov 6th, 2014author: SpeedcellPython的输入是野生字符串,所以要自己转类型strip去掉左右两端的空白符,返回strslipt把字符串按空白符拆开,返回[str]map把list里面的值映射到指定类型,返回[type]EOF…

本地缓存的原理及技术选型参考

转载自 本地缓存的原理及技术选型参考互联网架构设计的五大要素:高性能、高可用、可伸缩性、可扩展性、安全。如何做到高性能、高可用,缓存是一大助力。我们知道,绝大部分的时候,读数据写数据符合二八定律。并且读数据中&#xff…

程序员欢呼:微软Bing开始支持搜索源码、可直接运行

日常生活中,程序员们经常会遇见这样那样的问题,比如忘记了代码该怎么写,又或者需要实现一些特殊的算法和功能。这时候,你就可以去找微软 Bing 帮忙啦! 微软最近联合 HackerRank 一起研发了一项新功能:源代码…

rabbitmq创建缓存连接工厂

转自: 【RabbitMQ-3】连接池的配置_小胖学编程的博客-CSDN博客文章目录1. rabbitmq的connection连接池1.1 问题提出1.1.1 Connection对象管理以及性能1.1.2 Channel对象管理以及性能1.2 Spring AMQP线程池配置1.2.1 ConnectionFactory连接工厂1.2.2 消费发送和接收…

python简短语法_写出优雅简洁的 python 语法(二)函数传参

Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式。基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读。位置传递,默认参数位置传参…

你真的了解Java中的三目运算符吗

转载自 你真的了解Java中的三目运算符吗三目运算符是我们经常在代码中使用的,a (bnull?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。本文就介绍一…

关于.NET下开源及商业图像处理(PSD)组件

1 前言 这篇博客的背景是:为了完成吉日嘎拉的“PSD文件损坏检测和图层检测”任务,查找了目前.NET各种开源的及商业的图像处理资料,在完成任务之后,进行总结。此次任务主要是用C#操作PSD(PhotoShop)文件,中文资料很少&a…

SpringBoot连接多RabbitMQ源

转自: SpringBoot连接多RabbitMQ源 - 掘金在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但…

满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...

分户,一般指子女成年或者成家后从父母户口里面独立出去,自立一户;也可以是指夫妻离婚后一方将户口独立出去(离婚也可以不分户,变更婚姻状态就行)。简单的说分户是指原本在一个户口本上的人口,现在分出去自成一个户口本…