网站首页 > 资源文章 正文
最近看了一些文章说原码、反码、补码。还有一些软考的那些讲师讲解。直接说这样背就没有问题了。完全没有解析背后的原理。下面就是软考的其中一页PPT。写得是没错,但是这样背,很快就忘记了,我想从另外一个方向和你说。为什么会出现原码、反码和补码?他们解决了什么东西。
其实出现这些都是为了方便表示一个负数,而且在实现数的运算的时间更简单。现在计算机表示一个数都是用补码,它解决了+0,-0的问题。
下面用4个比特位来表示数
原码表示:最高位(MSB most significant bit)代表符号位,0为正,1为符。你会发现会有-0(0000),+0(1000),和我们平时生活当中只有一个-0和+0是一样的相违背。然后对一个数进行加法。按我们正常的去做加法,你会发现会结果是错的。
明明+1 +(-1)=0,但是你看下面对应的码表是-2.如果想纠正这种结果也可以通常复杂的逻辑组件实现。看结果是不是有点反人性。所以计算机放弃使用这种表示一个数。
反码表示:这个你是需要记的,反码是将正数取反(也就是翻转它所有位,在硬件层面就是进行NOT运算)。直接上图。你会发现仍然存在一个+0(0000),-0(1111)的问题。
做加法是怎么操作的呢,使用循环进位这种方法,如果加法在最高位有溢出,就从最低位加1.如果不理解你再多看一次加粗的话还有再看一次图。如果没有溢出就不用管,但是这样还是比较麻烦,因为要多做一步加1的操作(我看《计算机系统解密》这书上说这样操作加法麻烦,但是我觉得采取补码的表示方法你本来也就要采取码加1的做法,不也是多做了一步加1的操作吗,怎么就说有更简单的方法呢)。但是采取补码运算时方便了。
补码表示:对正数取反,也就是对每一位进行NOT运算,然后加1,如果出现进位溢出,那就丢弃。 你看0就是(0000),如果你按补码的规则,0000取反就是 1111再加1就是[1]0000,其中1是溢出,那就丢弃,那还是0000,所以完美地0只有一种表示方法。而且原码,反码都出现了两个0,补码只有一个0,所以补码能表示更多数,多在能比补码反码多表示一个负数。
书中插图那里我认为不对,-1应该是1111的表示。它想寻找一个-1的表示方法。就是什么数加1会等于0。0的表示方法和1的表示方法已经规定了好了。所以在寻找一个-1的表示方法,然后就得出了补码的规则。所以你知道为什么会出现这些不同码的表示方法了吧。就是为了寻找一个高效的方法(排队奇异,使运算简单)来表示一个负数。
现在你已经了对原码,反码,补码清楚了吧。当你遗忘,你想想怎么表示一个负数,能够不出现+0,-0的现象。计算是使用补码来表示的负数的。最后来做几道题来结束吧。
(1)十进制数-48用补码表示为( )
A、10110000 B、11010000 C、11110000 D、11001111
(2)已知X、Y为两个有符号数的定点整数,它们的补码为:[x]补=00010011B,[y]补=11111001B,则[X+Y]补= B
将你的答案写在评论区。
猜你喜欢
- 2024-09-08 1.2 计算机内信息的表示与存储(计算机内部信息的表示及存储采用的是)
- 2024-09-08 C++手撕底层:位、字节、原码、反码、补码的深入理解
- 2024-09-08 算法水题练习(二)(算法题模板)
- 2024-09-08 二进制是怎么减法运算的?(二进制是怎么减法运算的原理)
- 2024-09-08 “原码、反码、补码”计算机如何更好的实现算法?
- 2024-09-08 PLC的加、减、乘、除指令有什么用?其实功能十分强大!
- 2024-09-08 【1682023】指令:NEG(088)—— 完成二进制求补的功能指令
- 2024-09-08 C语言-自运算、位运算、取反运算(c语言位运算的运算规则)
- 2024-09-08 软件设计(十三)-原码、反码、补码、移码
- 2024-09-08 原码、反码和补码:深度解析C语言中的二进制表示
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)