zoukankan      html  css  js  c++  java
  • (5)原码反码补码

    # (1)概念  

    计算机的所有数据在底层都是以二进制的[补码]形式存储

    实际人们看到的数字是[原码]转化来的

    而[原码]是通过[补码]得到的

    补码 -> 原码 -> 最后人们看到的数

    ***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***​

    正数高位补0 负数高位补1(前面空白位全是1)

    数字1   00000000 1 正数高位都补0

    数字-1 111111111 1 负数高位都补1

    原码: 用来转换对应进制

    反码: 二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换.(符号位不变)

    补码: 用来做数据的存储运算. 补码提出的根源是让计算机底层的实现减法操作(可以表达出一个数的正负)

    言外之意:计算机默认只会做加法,例:5+(-3) => 5 - 3

    乘法除法:是通过左移和右移 << >> 来实现

    # (2)运算

    (原码 反码 补码之间的转换 , 符号位不要动)

    正数: 原码 = 反码 = 补码

    负数: 原码 = 补码取反加1   给补码求原码

    负数: 补码 = 原码取反加1   给原码求补码

    例:计算-9+5的结果,先分别算处二进制

    -9

    000000001001 (原码)==>负数的原码前面都是0补位

    1111111110110 (反码)==>原码全部取反

    1111111110111 (补码)==>反码+1,如果都是1就进一位

    5

    0000000000101 (正数==>原码 = 反码 = 补码)

     

    1111111110111 -9的补码

    000000000101 5的补码

    1111111111100 (补码)====>两者补码相加得到新的补码

    补码==>取反 + 1 ==> 原码

    000000000011 (取反)

    000000000100 (加1==> 原码)得到 -4

    只保留符号位第一位,剩下中间的位用0填充即可

     

     

     

     

     

     

  • 相关阅读:
    RMAN备份脚本执行遇到RMAN-03002,06091问题处理
    物化视图日志过大,手工清理
    大表添加一个字段需求
    oracle_job进程相关学习测试
    11.2.0.4单实例静默安装
    RMAN执行crosscheck archive报错ORA-19633问题处理
    df执行hang住
    应用人员反馈报错,ORA-03137: TTC protocol internal error : [12333]
    普通表分区改造_rename方式
    SQL查询oracle数据库最近备份情况
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10795615.html
Copyright © 2011-2022 走看看