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

    原码、反码、补码都是有符号定点数的表示方法。

    一个有符号定点数的最高位为符号位,0是正,1是负。

    反码 = 原码(除符号位外)每位取反;

    补码= 反码+ 1;

    反码 = 补码 - 1;

    移码= 补码符号位取反;

    原码就是这个数本身的二进制形式。

     

    正数的反码和补码都是和原码相同。

    负数的反码是将其原码除符号位之外的各位求反

    例:

    [-3]原=10000011

    [-3]反=11111100

    [-3]补=11111101

    [-3]移=01111101

     

    为什么要设立补码呢?

    第一是为了能让计算机执行减法:

    [a-b]补=a补+(-b)补

    第二个原因是为了统一正0和负0 

    正零:

    00000000 

    负零:

    10000000 

    这两个数其实都是0,但他们的原码却有不同的表示。但是他们的补码是一样的,都是00000000 

    特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)

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

     

    总结:

     在计算机内,定点数有3种表示法:原码、反码和补码

     所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

     反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

     补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

    移码表示法规定:正数和负数的移码都是补码符号位取反。

  • 相关阅读:
    怎么能让json_decode解析带斜杠的字符串
    **PHP转义Json里的特殊字符的函数
    sql中exists,not exists的用法
    **mysql数据库中实现内连接、左连接、右连接
    **PHP foreach 如何判断为数组最后一个最高效?
    mysql sql语句中用括号处理or和and的运算顺序
    iOS图片缓存
    linux regulator之浅见【转】
    Linux中THIS_MODULE宏定义详解
    likely()与unlikely()
  • 原文地址:https://www.cnblogs.com/acm-jing/p/4456041.html
Copyright © 2011-2022 走看看