补码是什么?补码有什么用?
首先我们来了解下补码的定义,在很多资料上说补码都是从原码说起,但实质上补码是有其定义的:
补码定义:计算机中二进制形式的补数。
这个定义是比较抽象的,下面我将举一些实际的例子来解释。
二进制形式:就是0和1组成的串,例如数字3的二进制形式是11,数字-9的二进制形式是11001。
补数:初中时我们学过互补角,两个角加起来等于180度,则称两个角互补。在日常生活中,将某物体顺时针旋转270度和逆时针旋转90度能达到同样的效果,把时钟里的分钟顺时针调整40分钟和逆时针调整20分钟,分针最后的位置是一样的。这时270是90的补数,90也是270的补数;40和20也同理。
那么计算机中为什么要用补码呢?
因为使用补码可以把减法运算变成加法运算,以此来简化逻辑算术单元设计。现在的计算机里只有加法器,没有减法器。例如7-3可以转换为7+(-3)。为进一步理解,我们再来了解两个定义。
补码计算法定义:非负数的补码是其原码本身;负数的补码是其绝对值的原码最高位符号位不变,其它位取反,再加1。
模定义:一个负整数的绝对值与负整数补码的和。
前面提到的270+90=360,360就是模,40+20=60,60就是模。模其实就是计量范围,在数学计算中就是进位的那一位,像个位数计算3+7=10,这个10就是超出了个位数的计量范围,只能进位。在二进制数中,当位数为n时,模为。
在二进制位数n为4时,7的原码是0111,补码是0111;
-3的绝对值3的原码是0011,再对其原码求补码得到1101,所以-3用二进制形式为1101。
将两数补码相加,得到0100,换成十进制是4,结果正确。
0111+ 1101
0100
这里我们注意到两二进制数相加结果为10100,最高位的1因为二进制位数的限制为4,所以被丢弃了。10100=00100+10000,被丢弃是10000,即-16。
我们再根据模的定义得知模等于-3和其补码的和,即模=0011+1101=10000,即-16。
我们再来看-3的补码1101,如果将其当成无符号数来看,再最前面加个0即可当成无符号数,得到01101,转换成十进制得其值为13,此时我们发现7-3的本质是转换成了7+13-16,而-16不是真正的减16,而是丢弃,所以这个式子中就只存在一个加法7+13,这就是计算机把减法转换成加法的本质。
最后再来看看原码的补码为什么取反后要加1,如果不加1,那原码-3(1011)取反后就是1100,不看最高位符号位,我们发现011+100=111,即7,而模为8,也就是说当所有位都为1时还比模少了1,所以最后要加上1。
顺带提一下为什么各数据类型的取值范围负数的绝对值比正数大1,就拿byte来说,其位数为8,最小值是-128(1000000),最大值是127(0111111)。
最大值127是01111111应该很好理解,正数最高位肯定是0,要使数值最大,后面肯定要为1。
最小值-128是10000000。很多人根据最大值127理所当然的想到最小值是-127,而且其二进制为11111111。其实不然,首先11111111不是-127,而是-1,再者,我们来看负数二进制转为十进制的计算方法(任取一个负数10101010):
(-1)x+(0x+1x+0x+1x+0x+1x+0x)
所以,(-1)x加括号里的正数,要使值最小,括号里要为0,所以后,7位要全为0,即10000000。
补码是什么?补码有什么用?相关推荐
- 数的机器码表示:原码、反码、补码、变形补码、移码和浮点数编码
我们平时书写的数据如+110.-111称为数的真值,而数在经过特定的方式编码后在计算机中的表示称为数的机器码.为满足计算机中不同操作的要求,对于一个数常见的编码方式有如下几种. 一.原码 (1) 整数 ...
- c语言为什么要用补码,什么是补码为什么要用补码
什么是补码为什么要用补码? 1.计算机中为什么使用补码形式: 电脑里面的数值用补码来表示,一方面是为防止0有2个编码,另外是为了将减法运算用加法运算表示出来,以达到简化电路的作用(有负数的概念,减法也 ...
- 计算机组成原理补码加法证明,补码加减法运算(计算机组成原理).ppt
<补码加减法运算(计算机组成原理).ppt>由会员分享,可在线阅读,更多相关<补码加减法运算(计算机组成原理).ppt(25页珍藏版)>请在皮匠网上搜索. 1.计算机组成原理2 ...
- 计算机中真值的概念,【概念辨析】真值、机器数、原码、反码、补码、变形补码、移码...
吐槽:最近在学中国大学MOOC的一门课程<计算机系统基础(一)>,初学感觉对这些乱七八糟的码比较纠结,所以写个辨析,希望帮自己理清概念也希望帮到其他初学者.ps:纯属手敲和个人理解,不过有 ...
- 原反补码的相互转换、补码加减法计算规则及例题
原.反.补码 正整数的原码.反码和补码是一样的 对于负数: 1.2. 原码 ⇋ 反码:符号位不变,数值位按位取反 3.4. 原码 ⇋ 补码:符号位不变,数值位按位取反,末位 + 1 5. 反码 → 补 ...
- c语言如何算补码,C语言补码(C语言学习笔记)
记录 在学习C语言数据范围时了解到了补码的概念,记录一下什么是补码,补码怎么运算的 运算 原文链接:https://www.cnblogs.com/lsgsanxiao/p/5113305.html ...
- 补码(complement)!:补码的定义(艾伦克莱门茨编著)和用途
文章目录 国内的教材和国外的某些教材对补码的定义有所出入 此处系国外的说法: 国内的教材和国外的某些教材对补码的定义有所出入 此处系国外的说法:
- -7的补码用计算机,补码计算器-计算机求补码
在计算机中,负数以其正值的补码形式表达. 什么叫补码呢?这得从原码,反码说起. 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码.5的反码:将二进制数按位取反,所得的新二进制数称为原二进制数的 ...
- 6位有符号补码阵列乘法器_C/C++学习日记:原码、反码和补码
一.什么是原码.反码和补码 我们知道,在计算机内部存储的带符号数都是以补码形式存储,用补码形式进行运算的.什么是一个数的补码?为什么要用补码?这要从数的原码.反码开始讲.我们以整型数为例,且假定字长为 ...
- 有符号类型的最小负数的补码的由来
有符号类型的最小负数的补码的由来 一. 16位的有符号整数(int) 在计算机中是用补码存储数据 为什么不用原码存 就是因为原码表示不了最小值-32768 如果是原码表示的话,编码中+0是用16个0表 ...
最新文章
- Set Matrix Zeroes leetcode
- git常用命令及分支简介
- 消息中间件的核心思想
- 【英语学习】【Level 08】U01 Let's Read L4 Hot off the press
- 浅谈K短路算法(KSP)之二(YEN .J算法求解)
- 苹果已招聘两名梅赛德斯前工程师 其中一人曾在保时捷工作近6年
- Android中处理崩溃异常和分析日志的两种思路
- JAVA与C#的区别
- hadoop2.6---常用命令
- 全民一起玩python实战篇百度云_【全民一起玩python】下载 - 面包树
- 领导者核心能力七力模型
- 状态码如何返回Http/1.1 200 OK
- 痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
- rm 好凶残,太 TM 吓人了!
- TensorFlow学习笔记——《TensorFlow技术解析与实战》
- 最简单ListView显示联系人姓名和电话号码
- TinyOS总体介绍
- 第一篇博客,写给自己
- 高项.2021案例默写
- 什么模式下不可使用曝光补偿_曝光的正确顺序是什么 曝光正确顺序介绍