美文网首页
彻底搞清楚二进制运算(位运算、位移运算)

彻底搞清楚二进制运算(位运算、位移运算)

作者: weylau | 来源:发表于2018-08-26 22:46 被阅读30次

    网上对二进制运算解释的过于复杂,最近在看了韩顺平老师讲的二进制运算,这里总结出来分享给大家

    一、首先认识理解 原码、反码、补码

    以下都是对于有符号的二进制而言的

    1、二进制的最高为是符号位:0表示证书1表示负数

    2、正数的原码反码补码一样

    1 ==> 原码 0000 0001 ==> 反码 0000 0001 ==> 补码 0000 0001
    

    3、负数反码等于原码取反符号位不变,补码等于反码+1

    -1 ==> 原码 1000 0001 ==> 反码 1111 1110 ==> 补码 1111 1111
    

    4、0的反码补码都是0

    5、计算机运算的时候都是以补码的方式来运算的

    二、位运算

    有三种位运算 即 &按位与 | 按位或 ^ 按位异或

    运算规则

    &按位与 :两位全1结果为1,否则为0
    | 按位或 :两位有一位为1结果为1,否则为0
    ^ 按位异或:两个一个为1一个为0结果为1,否则为0
    注意:所有的运算是以补码的方式来运算的,运算的结果也是补码需转回原码才是最后结果

    案例:分别计算 2&-2、2|-2、2^-2
    2的补码:和原码一样 0000 0010
    -2的补码: 原码:1000 0010  反码:1111 1101  补码(原码+1):1111 1110
    
    计算:2&-2
    2  0000 0010
    -2 1111 1110
    结果:0000 0010    2
    
    计算:2|-2
    2  0000 0010
    -2 1111 1110
    结果:1111 1110    =》反码(补码-1):1111 1101 =》原码:1000 0010 =》-2
    
    计算:2^-2
    2  0000 0010
    -2 1111 1110
    结果:1111 1100    =》反码(补码-1):1111 1011 =》原码:1000 0100 =》-4
    

    三、位移运算

    右移运算符:>> 地位溢出符号位不变,并用符号位补溢出高位
    左移运算符:<< 符号位不变地位补0

    案例:分别计算 1 >> 2 、1 << 2
    1 >> 2
    1补码  =》0000 0001  >> 2  =》0000 0000  结果:0
    
    1 << 2
    1补码  =》0000 0001  << 2  =》0000 0100  结果:4
    

    相关文章

      网友评论

          本文标题:彻底搞清楚二进制运算(位运算、位移运算)

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