为什么要引入补码 要引入补码的原因
事实上,补数是一个正数 。quot做运算而不是负数。
有了补码,电脑里就没有负数了 。
所以电脑里没有减法 。
所以只要电脑里有加法器,全世界都可以用 。
正数怎么代替负数?
当一个数的位数有限时,计数具有周期性 。
比如规定只使用0~99两位小数,周期为10 ^ 2=100 。
此时,您可以:
25 – 1=24
25 99=(一百)24
放弃进位只取两位数 , 那么99和-1是等价的 。
99叫做-1的补码 。
公式:补码=周期(10 n)负数,其中n是补码的位数 。
–
计算机使用二进制,称为:补码 。
如果是8位二进制 , 周期就是2 ^ 8=256 。
公式:补码=周期(2 n)负数 , 其中n是补码的位数 。
–
使用补码后,可以通过加法实现加减运算 。
因此 , 可以简化计算机硬件 。
这就是 介绍补语 。quot 。
原码和反码都没有这个功能 , 所以计算机不使用它们 。
计算机中为什么用补码来表示有符号数?
通过补码运算,可以根据最高位和次高位的进位之差来判断计算结果是否溢出 。
有符号数在计算机中有三种表示法,即原码、补码和补码 。
这三种表示有两部分:符号位和数字位 。符号位是 积极 用0和 消极 具有1 , 而数字位具有不同的表示 。
在计算机系统中,数值总是用补码来表示和存储 。原因是有了补码,符号位和数值域可以统一处理;同时,加减法也可以统一处理 。
正整数的补码是它的二进制表示,和原码一样 。
例:9的补数是 。
(注:此9 补码是用8位二进制表示的,表示方式有很多种,包括16位二进制、32位二进制和64位二进制 。每个补码表示只能表示有限的数 。)
负面解读:
求负整数的补码 , 将其原码除符号位外的所有位取反后加1(0变1,1变0,符号位不变) 。
同一个数在不同的补码表示中是不同的 。例如-15的补码在8位二进制中是,但在16位二进制补码表示中是01 。以下全部用8位二进制表示 。
为何要用补码?
在计算机系统中,数据总是用补码来表示和存储 。
原因是有了补码,加减就可以统一了 。
补码就是补码,与原码的补码无关 。
你可以 不理解 为什么要用补语?。
–
补语实际上是a 正数代替负数运算 。quot 。
例如,十进制运算:
24 – 1=23
24 99=(一百)23
弃进位,99可以代替-1 。
这时候减法就转化为加法了 。
那么,99叫做-1的补数 。
丢弃进位是一个2位数的十进制计数周期:10 ^ 2=100 。
大家可以推导出求补数的公式:负周期 。
–
其实在三角函数中,大家都知道:
-/2和3/2,这两个角的作用相同 。
负角和正角怎么换?
还用到公式:正角=负角周期(2) 。
–
计算机用二进制,补码,所以叫:补码 。
8位二进制的计数范围是:0000 0000 ~ 1111 1111 。
转换成十进制,即:0 ~ 255 。
计数周期为2 ^ 8=256 。
那么-1的补码就是255(也就是1111 1111) 。
-2的补码是:-2 256=254=1111 1110 。
-128的补码是:128=1000 0000 。
这是可以用八位二进制表示的128个负数 。
求补数的公式还是:负句号 。
正数可以直接运算,不需要变换 。
所以正数根本没有补数 。
–
要找到补码,你不要 不需要联系 原始代码的符号位被反转并加。
那些乱七八糟的东西没必要 。
外国人不擅长数学,所以他们别无选择 , 只能做这些 道路封锁 诡计 。
为什么计算机要使用补码??
【toc】开门见山,我认为有两个最重要的原因 。
因: 之前在网上查资料,查到的原因大多数都是解释了第一点,而且解释的有理有据令人信服 。所以我这里先说第二点,规则一致 , 这个是看了 深入理解计算机系统 的公开课学到的 。
B站深入理解计算机系统公开课(有中文字幕,强烈推荐) 顺便提一嘴,研究这种问题不要用很大的数去想,就用4位数去思考反而能想的很清楚 。
假设我们有一个 只有4位的计算机,计算乘法 -2 * -3 的值。如果使用原码或者反码进行计算, 注意,乘法的计算规则是:直接截断保留最低4位 , 保留后的最高位即为符号位 。-2 的补码: 1110 转换成无符号数(十进制) : 14 -3 的补码: 1101 转换成无符号数(十进制) : 13 无符号数 14 * 13 = 182 将182 转换成 二进制 并且只保留最低 4 位: 0110 (0110的十进制是 6, 等于正确答案) -2 的原码: 1010 转换成无符号数(十进制) : 10 -3 的原码: 1011 转换成无符号数(十进制) : 11 无符号数 10 * 11 = 110 将110 转换成 二进制 并且只保留最低 4 位: 1110 (1110的十进制是 -6 或者 14,均不等于正确答案 6) 如果你觉得这是个巧合,那么可以自己试几个数算一下,或者用反码也算一下,看看是什么结果 。可以简化硬件的计算,因为硬件就是单纯的电路板,它可不知道什么符号位,它能做的就是把接收到的两个值做运算 。
如果计算机使用原码 , 那么是不是cpu需要准备两套运算电路,运算前还要做个 if else 判断?一套给有符号数用,一套给无符号数用 。这样子会造成极大的资源浪费 。但是 如果我们使用补码,就可以让硬件无脑的计算再截断好了,反正最后的值不论是 有符号 还是 无符号 , 都能得到正确的答案。
由于讲这个的太多了,这里就简单说一下(不写反码了,直接用补码举例) 。用整数 1 来做个实验,1 的原码是 0001,补码是 0001 。-1的原码是1001 , 补码是 1111 。
如果你让 1 和 -1 的原码相加,那么他们很明显不得 0 , 但是补码相加溢出再截断,最后等于0。至于为什么会这样?因为补码的定义就是这样啊 用我自己的话总结:补码就等于现有的位再加一位,新加的位等于1,其余都为0。减去当前的原码,就成了补码 。
用例子来说就是 10000 (总共5位) 减去 1 的原码 0001 , 就等于 1 的补码 1111。10000 – 00001 = 1111 用 -1 举例 ,-1 的补码 1111 这四位不是对应着 8 4 2 1 嘛,那么直接把 最高位 的值 乘以 -1 , 其他位都是正值 , 加起来就行了 。
计算机中为什么用补码表示数值?
在计算机系统中,数值,一律采用补码表示和存储 。
在计算机中,原码和反码,都是不存在的 。
所谓的补码,实际上,是“代替负数”的正数 。
使用了补码(正数),计算机中,就没有负数了 。
同时,也就没有减法运算 。
由此,计算机的硬件,就能够得以简化 。
----------------------
正数(即补码),怎么就能代替负数呢?
当限定了参加计算的位数,计数,就是周期性的 。
如 2 位 10 进制数,周期就是 10^2 = 100 。
此时,-1 就能用 99 代替:
25 - 1 = 24
25 + 99 = (进位) 24
你把进位舍弃,只保留 2 位数,这两种算法 , 就是相同的 。
算法:代替负数的正数=负数+周期 。
-------
8 位 2 进制数,周期是: 2^8 = 256 。
-1 就可以用 255 = 1111 1111 代替 。
----------------------
使用补码的目的 , 是:简化硬件 。
算法:补码=负数+2^n,n 是补码的位数 。
求补码 , 是很简单的事 。
千万别拐到“原码反码取反加一符号位不变”去 。
老外脑子不好用,才会弄出哪些个骚操作!
如果从“取反加一”学习,必然就不理解“为什么用补码” 。
因为老外也不知道,为什么用补码表示数值 。
【计算机中为什么用补码来表示有符号数?】本文到此结束 , 希望对大家有所帮助 。
- ?京剧演员李胜素的老公是谁 她为什么叫素团、李漂亮
- 为什么越敷面膜皮肤越不好 ?经常贴面膜对皮肤好吗
- 新生儿婴儿打呼噜是因为什么原因 ?新生儿打呼噜是什么原因引起的
- ?袁春望为什么黑化
- 美式咖啡为什么能减肥 ?美式黑咖啡为什么可以减肥
- 为什么手机电越充越少了呢
- 糙米饭热量比米饭更高为何还能减肥 糙米饭为什么能减肥
- 为什么iPhone7分辨率这么低
- ?蜂蜜为什么是凝固的而且是白色的
- 为什么Linux越来越受欢迎?