zoukankan      html  css  js  c++  java
  • 补码小记

    了几年计算机,发现连补码都还没搞清楚,可悲啊

    刚开始是想INT_MAX+1=?
    我想INT_MAX=0x7fffffff
    INT_MAX+1=0x8fffffff
    二进制就是10000000000000000000000000000...
    计算机应该是作为负数的补码处理,那么求原码是 ,非符号位取反+1,就是1111111111111111111....+1,这是个啥...这不溢出了吗...
    想了好久不明白,详解看下


    你的问题可以这样解决

    [10000000]补
    =[10000000]反+1
    =11111111+1
    =(1)00000000
    =00000000(最高位溢出了,符号位变成了0)

    你可能会问 :
    10000000这个补码表示的哪个数的补码呢?
    其实这是一个规定,这个数表示的是-128
    所以n位补码能表示的范围是
    -2^(n-1)到2^(n-1)-1
    比n位原码能表示的数多一个
    到这里你可能已经了解得差不多了,但还是有点迷糊,那再举些说明的例子:
    -0.1101
    原码:1.1101
    反码:1.0010 //负数时,反码原码取反
    补码:1.0011 //负数时,补码为原码取反+1
    移码:0.0010 //原数+1
    -1011
    原码:11011
    反码:10100 //负数时,反码为原码取反
    补码:10101 //负数时,补码为原码取反+1
    移码:00101 //原数+10000
    1011
    原码:01011
    反码:01011 //正数时,反码=原码
    补码:01011 //正数时,补码=原码
    移码:11011 //原数+10000
    0.1101
    原码:0.1101
    反码:0.1101 //正数时,反码=原码
    补码:0.1101 //正数时,补码=原码
    移码:1.1101 //原数+1
    从以上您 可能已经观察出来了,其实让人不理解的原因在于:
    无法用8位的源码表
    这个数的真值是 -2^7
    源码的表示范围是 -(2^7 - 1)到 2^7 - 1
    补码的表示范围是 -2^7 到 2^7 - 1
    补码要多出一个数,而这个数就是你问的10000000

    在源码里面00000000和100000000都是表示0
    这样比较浪费,在补码里面,就把100000000当做
    -2^7 ,以扩大补码表示范围
    以上回答希望对你有用

  • 相关阅读:
    pip错误:'utf-8' codec can't decode byte解决方法
    windows中python2与python3共存
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    项目需求分析报告答辩总结
    项目选题报告答辩总结
    项目UML设计(团队)
    # 第七次作业--项目需求分析(团队)
    结对项目--第二次作业
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3321652.html
Copyright © 2011-2022 走看看