源码、反码、补码,他们的本质是什么?

您所在的位置:网站首页 原码补码反码表示什么意思 源码、反码、补码,他们的本质是什么?

源码、反码、补码,他们的本质是什么?

2024-07-07 18:52| 来源: 网络整理| 查看: 265

明确概念

二进制形式: 将一个十进制数字转换为二进制,可以通过重复地对2取模运算,最后逆着把余数组合起来自然就没问题。那这个是什么原理?一个数字刚开始对2取模,得到的余数自然就是0或者1,因为倒数第二位的权值为2(十进制倒数第二位代表10),不足倒数第二位才会在最低位体现,所以对2取模余数就是才不足多出来的。 然后接着对2取模运算,算上上次除2,一共是相当于对4取模,因为倒数第三为权值为4,所以不足4会在倒数第二位体现,依次类推。 机器码: 由符号位和数值为组成,符号位仅一个二进制位,数值位就是一个数的二进制形式,高位用0补齐。 源码: 等同于机器码 反码: 正数:等同于其源码; 负数:源码符号位不变,数值为取反,0变1,1变0。 补码: 正数:等同于其源码;负数:反码末尾+1。

为什么需要这些?

先明确一个问题,计算机中为什么用0、1存储数据,其实是没办法了,只能用0、1,现实世界,因为人们用不同的书写笔迹来记录不同的数字,用圆圈代表0,用一个竖着的杠代表1,用一个扭来扭曲的数字代表2,用一个类似于耳朵的东西代表3……,也就是通过10个不同的标记来记录了十个数字,发明了十进制,但是计算机中有哪几种状态可以作为标记?电子器件只有高低电平这两种状态,所以只能代表0/1两个数字,所以只能有二进制,满2就得进1,所以所有数字都得用二进制表示,3因为满了一次2所以进了个1,还多出来个1,所以11就是3,还要存储负数,所以想出来个办法来体现符号,但是只有这两种状态、没办法只能约定好,第一位用0代表正,1代表负、也就是在第一位碰到0/1把他们翻译成正负,别把他们翻译成数值。于是就有了源码

有了源码为什么还有反码、补码?

首先计算机在设计的时候,只设计了加法器,没有减法器,所以有负数参与的运算(相当于减法运算)怎么来实现?想象一个钟表刚开始指向12点,我现在让你顺时针转3格子,逆时针转2个格子,再顺时针转5个格子,再逆时针转4个格子(3-2+5-4),结果是什么样?指向了2点对吧!那我想一个运算规则使得这个计算结果对就行了,别管我怎么转的。 思考: 对于有12个格子的钟表来说,因为只有CPU加法器,所以只能顺时针转。逆着转两格,是不是等于顺着转10格,也就是说对于一个12个格子为一个大单位的规则,我是不是-2和+10的效果一样。2+10=12. 明确了这个道理开始举一个例子: 一个4位的数字 -2=1010(源码),这个4位的数字一个大单位是多少?显然是24,那么这个-2是不是等同于就是24-2=+14,+14的机器码就是多少1110,是不是正好就是-2的二进制补码?也就是补码这个运算规则正好就是将办不到的逆时针变为顺时针。 为什么补码的运算规则就是正好补充其满进制(16)的补集(14)? 首先明确取反其实就是弄补集,因为两个数取反,用+来运算同位置有且仅有1个1,所以加起来就是1111,因为1111为15相较16还差一个1,所以补码最后还要+个1,为什么符号位不变,因为符号位本身就是1,这个1原来代表的符号不是数字,但是原来-2真正的数值位是三位010扩充成四位等于0010,也就是所有数字最高位都是0(扩充最高位用0代替才不会变数值),所以取反最高位必须是1,所以正好原来负数符号位正好是1,所以就不变。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3