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

    &在C++里叫做与运算。应该差不多吧。。大概就是这样的:(按一个个位运算)

    1&1=1
    0&1=0
    1&0=0
    0&0=0
    补充: 整数运算 x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。

    因为:x &(-x) 就是整数x与其相反数(负号取反)的按位与:1&1=1,0&1 =0, 0&0 =1。具体分析如下:
    □ 当x为0时,x&(-x) 即 0 & 0,结果为0;
    □ 当x不为0时,x和-x必有一个为正。不失一般性,设x为正。
    ●当x为奇数时,最后一个比特为1,取反加1没有进位,故x和-x除最后一位外前面的位正好相反,按位与结果为0。最后一位都为1,故结果为1。
    ●当x为偶数,且为2的m次方(m>0)时,x的二进制表示中只有一位是1(从右往左的第m+1位),其右边有m位0,左边也都是0(个数由表示x的字节数决定),故x取反加1后,从右到左第有m个0,第m+1位及其左边全是1。
    这样,x& (-x) 得到的就是x。
    ●当x为偶数,却不为2的m次方的形式时,可以写作x= y * (2^k)。其中,y的最低位为1。实际上就是把x用一个奇数左移k位来表示。这时,x的二进制表示最右边有k个0,从右往左第k+1位为1。当对x取反时,最右边的
    k位0变成1,第k+1位变为0;再加1,最右边的k位就又变成了0,第k+1位因为进位的关系变成了1。左边的位因为没有进位,正好和x原来对应的位上的值相反。二者按位与,得到:第k+1位上为1,左边右边都为0。结果为
    2^k,即x中包含的2的最大次方的因子。
    总结一下:x&(-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。 比如x=32,其中2的最大次方因子为2^5,故x&(-x)结果为32;当x=28,其中2的最大次方因子为4,故x & (-x)
    结果为4。当x=24,其中2的最大次方因子为8,故 x&(-x)结果为8。

    |在C++里叫或运算

    0|1=1
    1|0=1
    1|1=1
    0|0=0
    

    ^在C++里叫异或(xor)

    0^0=0
    1^0=1
    0^1=1
    1^1=0
    

    ~在C++里叫取反

     ~x=-x-1

    ~1=-2
    ~0=-1
    ~-1=0
  • 相关阅读:
    Maven插件系列之spring-boot-maven-plugin
    Java中getResourceAsStream的用法
    【redis】【linux】-bash: redis-cli: 未找到命令
    【bat】杀死指定端口
    【bat】查看端口占用情况
    【java】【springboot】nohup: 无法运行命令'java': 没有那个文件或目录
    【springboot】启动指定内存大小
    【java】【spring】源码分析,@AliasFor互为别名
    【idea】设置安装插件位置
    【记录】【springboot】java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal解决
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12747276.html
Copyright © 2011-2022 走看看