zoukankan      html  css  js  c++  java
  • 补码

    1- 以8位数据为例,无符号数编码的范围 0000 0000b-1111 1111b 0-255

      255 = 2^8 -1

    2- 有符号数编码 

      用8位数据的最高位表示符号位,0表示整, 1表示负

      0000 0000 0

      0000 0001 1

      0000 0010 2

      0111 1111 127

      1000 0000 ?

      1000 0001 -1

      1000 0010 -2

      1111 1111 -127

      可见表示数的范围 -127 -- 127 1000 0000 ? 无法表示

      考虑用反码

      0000 0000 0    1111 1111 ?

      0000 0001 1    1111 11110 -1

      0000 0010 2    1111 11101 -2

      0111 1111 127    1000 0000 -127

      也出现重复的0

      为了解决这种问题,采用一种称为补码的编码方法, 这种思想是: 先确定用 0000 0000b- 0111 1111b表示 0 -127 然后再用它们按位取反加1后的数据表示负数.

      0000 0000:0  1111 1111b+1 = 0000 0000b:0

      0000 0001:1  1111 1110b+1 = 1111 1111b:-1

      0000 0010:2  1111 1101b+b = 1111 1110b:2

      0111 1111:127  1000 0000b+1 = 1000 0001b:-127

      发现,以上方案中:

      (1) 最高位为1,表示负数

      (2) 正数的补码取反+1 为其对应的负数的补码;负数的补码取反+1,为其绝对值.

      1的补码为 0000 0001 取反 1111 1110 + 1 = 1111 1111b = -1

      -1的补码为 1111 1111取反 0000 0000 + 1 = 0000 0001b = 1

    3- 求-20的补码? 1110 1100b 

      正数 取反加1为 负数

      负数 取反加1为 正数

      20 = 0001 0100 取反 1110 1011 + 1 = 1110 1100b 可知 -20的补码为 1110 1100b 

    4- 1000 0000b表示什么呢? -128

      高位为1 表示负数 取反 0111 1111b + 1 = 1000 0000b 表示正数的 2^8 = 128 所以 1000 0000b 表示 - 128

      所以8位补码所表示的数的范围 -128 ~ 127 

    5- 补码为有符号数提供了方便,运算后的结果依然满足补码规则

      10      0000 1010b

    (+) -20      +1110 1100b

         -10      1111 0110b

  • 相关阅读:
    hdu2063:过山车
    牛客网:ph试纸
    牛客网:石子阵列
    最短路
    POJ1067:取石子游戏
    实现DataGridView实时更新数据
    SendMessage API
    使用Intel IPT技术保护您的帐号安全
    它是对 ACME(automated certificate management environment) 协议的实现,只要实现了 ACME 协议的客户端都可以跟它交互。
    time out 超时
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3574755.html
Copyright © 2011-2022 走看看