美文网首页
零星知识点

零星知识点

作者: Chasingcar_501 | 来源:发表于2019-01-04 19:48 被阅读0次

    一、原码、补码、反码

    1.原码、补码、反码

    机器数:一个数在计算机中的二进制表示形式。机器数是带符号的,第一位表征正负,0为正,1为负。比如+3,计算机字长为8位,00000011,-3是10000011
    真值:因为第一个数为符号位,所以机器数的形式不等于真正的数值,所以为区别起见,将带符号位的机器数对应的真正数值成为机器数的真值。
    例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

    2.原码、反码、补码的基本概念和计算方式

    原码、反码、补码是机器存储一个具体数字的编码方式

    • 原码
      符号位加上真值的绝对值,如果是八位二进制,第一位是符号位

    [+1]原 = 0000 0001
    [-1]原 = 1000 0001
    取值范围:[1111 1111 , 0111 1111]即[-127 , 127]
    原码是人脑最易于理解的方式

    -反码
    正数的反码是其本身,负数的反码是符号位不变,其余各位取反
    如果是负数的反码,看不出来数值的真实大小,需要先转为原码再计算

    • 补码
      正数的补码是自身,负数的补码是原码的符号位不变其余各位取反,再加一,相当于反码加一
      负数的真是数值也无法直接看出,需要先转为原码
    2.为什么要使用原码、反码、补码

    由于简化机器运算,所以机器只有加法没有减法。原码和反码都无法解决有负数的加法,因此出现了补码,以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128

    (-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补

    这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

    相关文章

      网友评论

          本文标题:零星知识点

          本文链接:https://www.haomeiwen.com/subject/ptdhrqtx.html