网站商城建设价格,工程项目全过程管理流程,企业网站域名空间,网站代理工具概述
先引入一个前提#xff0c;在计算机中数字是以二进制进行存储的#xff0c;也就是我们看到的2#xff0c;在计算机中存储的是10。我们进行的加法运算 213 在计算机中是这样的#xff08;这里先假设计算机存储的是4位二进制数字#xff09; 001000010011
很容以看的…概述
先引入一个前提在计算机中数字是以二进制进行存储的也就是我们看到的2在计算机中存储的是10。我们进行的加法运算 213 在计算机中是这样的这里先假设计算机存储的是4位二进制数字 001000010011
很容以看的出来4为二进制数能表示的最大数字是1111就像两位十进制数表示的最大数字是99一样。那如果在进行加法运算时结果超出存储的容量怎么办比如9918 二进制表示为1001100110010但是因为只能存储4位数的原因最高位丢了结果变成了 0010也就是2这时是发生了溢出的。在做运算时要避免数值发生溢出当然现在计算机存储的数字为64位日常使用完全不用担心
运算不光有加法还有减乘除。乘法就是多次加法除法就是多次减法。那么减法如何实现呢在刚开始的时候计算机只能进行加法运算这时一部分人想办法让其能够直接进行减法计算而另一部分人想通过加法来实现减法最终后者先给出了解决方案。只是我臆想的情景
通过加法来实现减法
还记得上面提到的四位二进制数表示的最大数字为15当发生溢出时 16二进制10000 0 17二进制10001 1 显然去掉最高位等于减去16 那么能不能利用加法溢出来实现减法呢下面简单推倒一下
9-27 若要实现 9x7 那么利用溢出的原理就要实现 9x71623 简单的解一下方程 x23-914 很好来验证一下
914 的二进制表示为1001111010111 最高位溢出结果为0111 也就是7完美。
下面问题来了如何将上边的2转成14呢也就是讲二进制的0010转成1110。他们有什么关系呢
伟大的数学科学家前辈们总结出了规律。并发明了反码和补码的概念。补码就是上面转换后的14。 原码按位取反反码 反码加补码 虽然不知道这个规律是如何找出来的但经过无数次验证确实是这样。
引入负数
当引入了负数的概念时为了表示正负规定第一位为符号位为正为负因为引入符号位原来的位数能表示的最大值也变成了0111。
因为负数的引入现在所有的减法都可以当做加法来实现了9-29(-2)或者说9(-2)9-2。计算仍然是通过补码来实现。 负数的补码为符号位不变按位取反再加 正数的补码为它本身 负数的补码很好理解就是上面总结的规律利用加法来实现减法。正数的补码为啥是它本身呢你看刚才分析的减法只有被减数进行了转换减数没变吧。很好理解。其实也是为了可以统一进行处理引入补码后正负数可以使用一套加减法规则进行计算。
简单实验一下 2(-4)-2 -4 二进制表示1100 补码1100 2 二进制表示0010 补码0010 110000101110(补码) 将计算结果再转成原码 1010-2没毛病 然后有一个尴尬的问题正数的0为: 0000负数的0为1000同一个数字但是换成补码后你会发现是同一个数字: 0000。 总结一下利用补码计算就是通过加法来实现减法运算是利用了计算机存储位数有限超出发生溢出并丢失最高位的特性。
不知道补码是哪位伟大的科学家发明的前人栽树后人乘凉膜拜。