zoukankan      html  css  js  c++  java
  • 原码、反码、补码

    1. 总的概念
        数在计算机中是以二进制形式表示的;
        数分为有符号数和无符号数;
        原码、反码、补码都是有符号定点数的表示方法;
        无符号数全部按正数处理;
        一个有符号定点数的最高位为符号位,0是正,1是负;


    2. 反码,补码定义
        正数:
                原码=反码=补码

        负数:
                原码
                反码 = 其原码除符号位之外的各位求反
                补码 = 反码 + 1(如果+1之后有进位的,要一直往前进位,包括符号位)


    3. 运算示例
        正零:00000000
        负零:10000000
        这两个数其实都是0,但他们的原码却有不同的表示。
        但是他们的补码是一样的,都是00000000
        特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
        [10000000]补
        = [10000000]反 + 1
        = 11111111 + 1
        = (1)00000000
        = 00000000 (最高位溢出了,符号位变成了0)

        有人会问
        10000000 这个补码表示的哪个数的补码呢?
        其实这是一个规定,这个数表示的是-128
        所以 n 位补码能表示的范围是
        -2^(n-1) 到 2^(n-1)-1
        比 n 位原码能表示的数多一个
        又例:
        1011
        原码:01011
        反码:01011 // 正数时,反码 = 原码
        补码:01011 // 正数时,补码 = 原码

        -1011
        原码:11011
        反码:10100 // 负数时,反码为原码取反
        补码:10101 // 负数时,补码为原码取反+1

        0.1101
        原码:0.1101
        反码:0.1101 // 正数时,反码 = 原码
        补码:0.1101 // 正数时,补码 = 原码

        -0.1101
        原码:1.1101
        反码:1.0010 // 负数时,反码为原码取反
        补码:1.0011 // 负数时,补码为原码取反+1

    4. 几个特殊定义:
        n 位补码能表示的范围:有符号数是 -2^(n-1) 到 2^(n-1)-1;无符号数是 0-2^n-1
        -128的补码是10000000, -128+1=-127,(-127)补=10000001=10000000+00000001 符合运算规则
        0的补码00000000

  • 相关阅读:
    ESP8266 RTOS SDK烧写环境构建
    杂记:解决Android扫描BLE设备名称不刷新问题
    deviceMotion.userAcceleration加速度方向
    二、多功能提示框——MBProgressHUD
    一、初识CocoaPods——XCode的依赖库管理工具
    摄像机的控制
    DOTween 使用方法
    Unity依赖注入使用详解
    Unity中对SQL数据库的操作
    unity导弹算法 预计目标点
  • 原文地址:https://www.cnblogs.com/zhuyongzhe/p/6989495.html
Copyright © 2011-2022 走看看