为什么要引入补码 要引入补码的原因
事实上,补数是一个正数。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 是补码的位数。
求补码,是很简单的事。
千万别拐到“原码反码取反加一符号位不变”去。
老外脑子不好用,才会弄出哪些个骚操作!
如果从“取反加一”学习,必然就不理解“为什么用补码”。
因为老外也不知道,为什么用补码表示数值。
本文到此结束,希望对大家有所帮助。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至81118366@qq.com举报,一经查实,本站将立刻删除。发布者:简知小编,转载请注明出处:https://www.jianzixun.com/75952.html