zoukankan      html  css  js  c++  java
  • 原码与补码

    为了方便,本文假设系统为4位系统。

    原码

    原码即我们熟知的十进制转二进制,不过最高位为符号位,1代表负数。

    image-20211210164307372

    如2的源码是0010,-2的原码是1010,负数的原码不能直接计算,比如2-2应该为0,但按照源码的二进制计算为1100(-4)。因此计算时需要一种新的表示方法,那就是补码。

    补码

    4位的二进制,最大的数是1111,再加1后即溢出,10000的最高位会丢失,因此它就是从0000-1111的循环。想象一下,我们加上一个负数可以理解为在刻度线上左移一段,但我们也可以向右移动(加上某个数)得到相同的结果。

    image-20211210163802901

    还是拿-2举例,往左移动2格和往右移动14格得到的结果是一样的,因此14就是-2的补码,我们需要减一个数时,加上它的补码即可。

    可以发现,补码的最高位也可以用于表示符号,并且1000可以用来表示-8,而在原码中1000是0。

    补码的计算:

    补码的计算也十分方便。我们需要计算一个负数的补码时,也即是计算它的正数向右移动多少发生溢出。

    还是以-2为例:

    -2的正数是2:0010,按位取反后是1101,两者加起来是:1111;在这基础上再加1,即发生了溢出。

    因此一个负数补码的计算是:其正数的原码按位取反加一。

    参考:
    带你认识CPU第04期——CPU是怎么计算减法的

  • 相关阅读:
    校验字符的表达式
    校验数字的表达式
    Html和xhtml有什么区别
    VUE3.0 + TS 项目实战 (2)基本写法
    VUE3.0 + TS 项目实战 (1)初始化项目
    props传递函数以及$emit触发父组件方法
    rollup
    js函数式编程
    移动端双击事件
    JS节流与防抖
  • 原文地址:https://www.cnblogs.com/cpcpp/p/15672664.html
Copyright © 2011-2022 走看看