zoukankan      html  css  js  c++  java
  • 18 位运算

    1,原码,反码,补码

      ①二进制的最高位是符号位,0代表正数,1表示负数

      ②正数的原码,反码,补码都一样

      ③负数的反码=它的原码符号位不变,其他位取反(1->0  0>1)

      ④负数的补码=它的反码+1

      ⑤计算机运算的时候,都是以补码的方式来运算的

    2,位运算符

      

     3,C语言位运算规则

      ① 按位与 & :  两位全为1,结果为1,否则为0

      ② 按位或 | :两位有一个为1,结果为1,否则为0

      ③ 按位异或 ^ :两位一个为0,一个为1,结果为1,否则为0

      ④ 按位取反 ~:0  --  1   1-- 0

    4,  求 ~2

      步骤:

      ①求出2的补码

      ②将2的补码取反

      ③取反后的补码变为原码

      求解:

        ①2是正数(4个字节),2的补码就是2的原码,所以2的补码是:

          00000000  00000000  00000000  00000010

        ②2的补码取反,得到

          11111111  11111111  11111111  11111101

        ③取反后得到的补码符号位是1,说明是负数,求负数的原码,需要先求出反码(补码-1)

          11111111  11111111  11111111  11111100

          再求出原码(符号位不变,其他位按位取反)

          10000000  00000000  00000000  00000011  =》-3

        ④得 2 按位取反的结果为 -3  

    5,求 2& -3

        步骤

        ①求出2的补码

        ②求出-3的补码

        ③将2的补码和3的补码按位与运算

        ④将运算后的补码变成原码

        求解

          ①2是正数,补码等于原码,为,

            00000000  00000000  00000000  00000010

          ②-3是负数,求负数的补码,需要先通过原码求出反码,

            原码:10000000  00000000  00000000  00000011

            反码:11111111  11111111  11111111  11111100

            补码:11111111  11111111  11111111  11111101

          ③两补码按位与运算:

            00000000  00000000  00000000  00000010

            11111111  11111111  11111111  11111101

           =》00000000  00000000  00000000  000000000

           =》0

          ④得到结果为0

    6,算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位

       1 >>2    ====   1/2/2=0

       -1 >> 2  === -1

        求解 -1 >>2

        步骤:①求出 -1 的补码

           ②将-1的补码右移2位

              ③ 将右移后的补码转为原码

        求解:

          ① -1 是负数,先得到原码,

            10000000  00000000  00000000 00000001

            再得到反码,

            11111111  11111111  11111111  11111110

            得到补码:

            11111111  11111111  11111111  11111111

          ② 右移2位

            11111111  11111111  11111111  11111111

          ③上面的补码告诉我们这是一个负数,需要先求出反码,

            10000000  00000000  00000000  00000000

             原码:(反码+1)

            10000000  00000000  00000000  00000001 =》 -1

    7,算术左移 << : 符号位不变,低位补0

        c=1 << 2   ==== 1*2*2 =4

  • 相关阅读:
    某公司基于FineBI数据决策平台的试运行分析报告
    perl AnyEvent
    perl 微信 获取消息
    公司里的人际界线——北漂18年(41)
    perl URLencode URLdecode的方法
    Exception:org.eclipse.m2e.wtp.MarkedException: Unable to configure OHBC
    获取DIV内部内容报错
    JsViews Error:Unknown template:“#projectData”
    jQuery获取checkbox选中的值
    nginx mongodb相关配置
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12343155.html
Copyright © 2011-2022 走看看