原码,反码,补码的研究和理解。
2014-08-05 16:42
183 查看
虽然大一上,计算机导论课的时候讲过这个问题,但是当时只知道是怎么计算的,并不能理解其中的原理,最近看了一些资料才理解的比较深刻。主要是看了 C语言中int型的取值范围_百度文库 这篇,受益很大。
那篇文章中举了一个例子:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法: 一种是倒拨4小时,即:10-4=6 另一种是顺拨8小时:10+8=12+6=6 。
在以12模的系统(数字只有0~11)中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。 对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
这就是为什么计算机可以把减法转化成加法,而且超出的最高位抹去不要,用的就是这个思想 。
下面我说一下我对原码,反码,补码的理解。还是举一个例子,比如一个四位的整数数据类型0101(也就是5)-0010(也就是2)计算机是怎么把它算成0011(也就是3)的。根据上面的思想,四位整数类型的模是10000。所以-0010相当于+(10000-0010)(实际上这个数就是补码),但是(10000-0010)算起来不是那么方便。所以不如让10000先-1,变成1111,再用这个数来-0010,最后再+1,也和刚才的数一样。1111-0010非常好算了,因为1111每一位都是最大的数1,只需要对应的把每一位的1变成0,0变成1就行了,得到的这个结果是1101(实际上这个就是反码),然后再+1,得到1110(补码)。所以就是0101-0010就和0101+1110=(1)1011最高位的1舍去,即1011(3)。
以上如果用原码反码补码的知识去计算十分相似。
所以我觉得计算机中应该没有反码的概念,反码只是人们模拟计算机运算时算补码比较方便的一个中间产物,计算机中只有原码和补码。
那篇文章中举了一个例子:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法: 一种是倒拨4小时,即:10-4=6 另一种是顺拨8小时:10+8=12+6=6 。
在以12模的系统(数字只有0~11)中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。 对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
这就是为什么计算机可以把减法转化成加法,而且超出的最高位抹去不要,用的就是这个思想 。
下面我说一下我对原码,反码,补码的理解。还是举一个例子,比如一个四位的整数数据类型0101(也就是5)-0010(也就是2)计算机是怎么把它算成0011(也就是3)的。根据上面的思想,四位整数类型的模是10000。所以-0010相当于+(10000-0010)(实际上这个数就是补码),但是(10000-0010)算起来不是那么方便。所以不如让10000先-1,变成1111,再用这个数来-0010,最后再+1,也和刚才的数一样。1111-0010非常好算了,因为1111每一位都是最大的数1,只需要对应的把每一位的1变成0,0变成1就行了,得到的这个结果是1101(实际上这个就是反码),然后再+1,得到1110(补码)。所以就是0101-0010就和0101+1110=(1)1011最高位的1舍去,即1011(3)。
以上如果用原码反码补码的知识去计算十分相似。
所以我觉得计算机中应该没有反码的概念,反码只是人们模拟计算机运算时算补码比较方便的一个中间产物,计算机中只有原码和补码。
相关文章推荐
- 原码,反码,补码的研究和理解。 2014-08-05 16:42 71人阅读 评论(0) 收藏
- 详解原码、反码、补码——深入理解补码
- 原码反码补码移码的理解及C语言验证
- 原码,反码,补码的理解
- 对计算机的原码,反码,补码的理解:
- 原码,反码,补码,个人理解
- 深度理解 原码, 反码, 补码
- 原码、反码和补码理解
- 对原码,反码,补码的一点理解。
- 理解原码,反码,补码转换
- 深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解
- 【总结】正确理解原码、移码、反码与补码
- 详解原码、反码、补码——深入理解补码
- 关于计算机数字表示原理的研究(原码,反码,补码)
- 理解原码,反码和补码
- 关于反码、补码、原码的一些应用于理解
- 关于原码、反码、补码的一些理解
- 原码、反码和补码的理解
- 再度理解原码、反码、补码
- 理解原码、反码和补码-------带例子详解