zoukankan      html  css  js  c++  java
  • 原码,反码,补码的研究和理解。 2014-08-05 16:42 71人阅读 评论(0) 收藏

    虽然大一上,计算机导论课的时候讲过这个问题,但是当时只知道是怎么计算的,并不能理解其中的原理,最近看了一些资料才理解的比较深刻。主要是看了 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)。

    以上如果用原码反码补码的知识去计算十分相似。

    所以我觉得计算机中应该没有反码的概念,反码只是人们模拟计算机运算时算补码比较方便的一个中间产物,计算机中只有原码和补码。


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    python从字符串内取两个符号之间的内容
    C# 判读取得字符编码格式
    jquery:字符串(string)转json
    SQL Server 2008 SQL2012 SQL2014 收缩日志 清空删除大日志文件
    WEB 倒计时
    成功配置TOMCAT的LOG4J日志系统,格式:HTML+每天以YYYY-MM-DD.LOG命名的日志文件
    IE Error: '__doPostBack' is undefined 问题解决
    分享:JAVA和C# 3DES加密解密
    好用的linux工具
    python多线程的概念(转载)
  • 原文地址:https://www.cnblogs.com/wmxl/p/4662723.html
Copyright © 2011-2022 走看看