zoukankan      html  css  js  c++  java
  • 二进制转化、<<、>>、>>>移位运算

    参考资料:

    https://www.cnblogs.com/wxb20/p/6033458.html

    https://www.cnblogs.com/joahyau/p/6420619.html

    https://www.cnblogs.com/yulinfeng/p/6602902.html

    https://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html

    https://www.cnblogs.com/xkfz007/articles/2590472.html(带小数)

    一、十进制转化二进制

    1、正数转化:

      正数25:

    25/2  12  1
    12/2  6  0
    6/2  3  0
    3/2  1  1
    1/2  0  1

    最后一列,倒序排列即为二进制值。   

    则:25的二进制为:11001 然后32位,高位补0,即:

    0000 0000 0000 0000 0000 0000 0001 1001

    2、负数转化:

      负数-25

    1、先算出正数的二进制。

    2、求反码,即二进制中1变0,0变1

    3、反码+1

    所以-25

    1、对应的正数25对应的二进制为:

    0000 0000 0000 0000 0000 0000 0001 1001

    2、反码:

    1111 1111 1111 1111 1111 1111 1110 0110

    3、反码+1:(补码)(如果最后一位本身为1,则进位,列如1011  +1  为1100)。

    1111 1111 1111 1111 1111  111 1110 0111

    即为-25的二进制表示值。

    二、二进制转化十进制

    1、正数转化(不够32位高位补0)

    011 1001

    654 3210

    则为:0*2^6+1*2^5+1*2^4+1*2^3+0*2^2+0*2^1+1*2^0=0+32+16+8+0+0+1=57

    2、负数转化(最高位为1则为负数)

    1、先算反码,即二进制中1变0,0变1

    2、反码+1(补码)

    3、算出对应的正数在加上负号。

    例:

    1111 1111 1111 1111 1111 1111 1010 1111

    反码:

    0000 0000 0000 0000 0000 0000 0101 0000

    反码+1(如果最后一位本身为1,则进位,列如1011  +1  为1100)。

    0000 0000 0000 0000 0000 0000 0101 0001

    算正数:

    1*2^6+0*2^5+1*2^4+0*2^3+0*2^2+0*2^1+1*2^0=64+0+16+0+0+0+1=81

    即十进制为-81.

    3、八进制、十六进制、十进制、二进制

    01111111111111111111111111111001

    十进制负数转八进制、十六进制

    负数转换成八进制、十六进制,只需在补码(二进制)的基础上,3位合成一位计算,或者4位合成一位计算

    -3的转换成二进制为:

    1111 1111 1111 1111 1111 1111 1111 1101

    八进制则将-3的二进制从右至左每3位为一个单元,不够三位用0补 即:

    011 111 111 111 111 111 111 111 111 111 101

    计算每一个单元,结果为:37777777775

    十六进制则将-3的二进制从右至左每4位合并为一个单元,即:

    1111 1111 1111 1111 1111 1111 1111 1101

    计算后为: FFFFFFFD

    转换十进制-3为八进制和十六进制

    十六进制(0,1,2,3,4,5,6,7,8,9,A,B,C,D,F)

    三:>>,<<,>>>移位运算

    1、<< 

    <<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。

    正数:5<<2

    1、转化为二进制:

    0000 0000 0000 0000 0000 0000 0000 0101

    2、整体左移指2位数

    0000 0000 0000 0000 0000 0000 0001 0100

    3、转化为十进制

    1*2^4+1*2^2=16+4=20

    M<<N相当于M*2^n.

    负数:-5<<2

    1、转化为二进制:

    1111 1111 1111 1111 1111 1111 1111 1011

    2、整体左移指2位数

    1111 1111 1111 1111 1111 1111 1110 1100

    3、转化为十进制

    -20

    M<<N相当于M*2^n.

    2、>>

    >>有符号右移位,将运算数的二进制整体右移指定位数,正数高位用0补齐,负数高位用1补齐(保持负数符号不变)

    正数:5>>2

    1、转化为二进制:

    0000 0000 0000 0000 0000 0000 0000 0101

    2、整体右移指2位数

    0000 0000 0000 0000 0000 0000 0000 0001

    3、转化为十进制

    1*2^0=1

    M>>N相当于M/2^n 取商

    负数:-5>>2

    1、转化为二进制:

    1111 1111 1111 1111 1111 1111 1111 1011

    2、整体右移指2位数

    1111 1111 1111 1111 1111 1111 1111 1110

    3、转化为十进制

    -2

    M<<N相当于如果运算数是偶数,那么那么它的运算结果就是 x = -(|x| / 2),如果运算数是奇数,那么它的运算结果就是 x = -(|x| / 2) - 1

    3、>>>

    >>>无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位)

    1、正数的>>>无符号右移位和>>有符号右移位计算结果相同

    2、负数

    -5>>>2

    1、转化为二进制:

    1111 1111 1111 1111 1111 1111 1111 1011

    2、整体右移指2位数

    0011 1111 1111 1111 1111 1111 1111 1110

    3、转化为十进制

    1073741822

  • 相关阅读:
    Java Bean、POJO、 Entity、 VO 、PO、DAO
    javadoc生成出现错误“编码 GBK 的不可映射字符”
    MySQL 查询所有子级函数
    mybatis配置自带缓存和第三方缓存
    通过js调用android原生方法
    window10上登录Oracle时提示ORA-12546:Permission denied
    大表的主键创建优化技术(转一篇有深度的文章)
    Oracle并行执行特性应用初探
    【腾讯大学】服务商工具+服务平台 小结
    【腾讯大学】猫眼:产品核心能力--产品决策力 小结
  • 原文地址:https://www.cnblogs.com/xyinjie/p/10482208.html
Copyright © 2011-2022 走看看