• 位运算常见操作


    • 常见运算符

        &:按位与。参与运算的两个数据,按二进制位进行“与”运算,运算规则:0&0=0;0&1=0;1&0=0;1&1=1 即两位同时为“1”,结果才为“1”,否则为“0”

        |: 按位或。参与运算的两个数据,按二进制位进行“或”运算,运算规则:0|0=0;0|1=1;1|0=1;1|1=1 即只要其中一个为“1”,结果为“1”

        ^:按位异或。参与运算的两个数据,按二进制进行“异或”运算,运算规则:0^0=0;0^1=1;1^0=1;1^1=0 即相同为“0”,否则为“1”

        ~:按位非。对一个数据进行按位非运算,得到的结果值与原值在数值上为-1

        <<:左位移运算符

        >>:右位移运算符

        <<<:无符号左移运算符

        >>>:无符号右移运算符

    • 常见操作
    1. 判断x是奇数还是偶数:(x&1)==0
    2. x乘以一个2的n次方的数:x<<n
    3. x除以一个2的n次方的数:x>>n
    4. 消去x最后一位的1:x&(x-1)
    5. 求x的相反数: ~(x-1)或者~x+1
    6. x的异或操作:~x = -x-1
    7. 把x从右边数第n位变1:x|(1<<(n-1))(n从1开始)
    8. 把x从右边数第n位变0:x&(~(1<<(n-1)))(n从1开始)
    9. 取x最后n位的值:x&((1<<n)-1)
    10. 取x前n位的值,后面的全部置为0:x & (~((1 << (32 - n)) - 1))
    11. 只保留x右边第一个1,其他的全部置为0:x & (-x) 或 x & ~(x - 1)
    12. 判断x的第n位是偶数还是奇数:(x & (1 << (n - 1))) == 0
    13. 求x的绝对值:(n ^ (n >> 31)) - (n >> 31) 或 (x >> 31) == 0 ? x : (~x + 1) 或 (x + (x >> 31)) ^ (x >> 31)
    14. 求两个数的最大数:(x & ((y - x) >> 31)) | (y & (~(y - x) >> 31))
    15. 返回x的符号:(i >> 31) | (-i >>> 31)(正数为1,负数为-1)
    16. 两数相加:(x | y) + (x & y) 或 (x ^ y) + ((x & y) << 1)
    17. 两数相减:(x & ~y) - (~x & y)
    18. 求两数的平均数:(x & y) + ((x ^ y) >> 1) 或 (x + y) >> 1
    19. 判断一个数是不是2的次幂:(x != 0) && (x & (x - 1)) == 0
    20. x对2的n次方求余:x & (2^n - 1)(这里的^是幂的次方)
    21. 判断x和y的符号是否相同:(a ^ b) >= 0
    22. if(x == a) x = b; if(x == b) x = a:用异或运算符:x = a ^ b ^ x

      

  • 相关阅读:
    12款有助于简化CSS3开发的工具
    log4net简介
    javascript面向对象重写右键菜单事件
    Winform 通用分页控件实战篇(提供源码下载)
    新浪微博信息站外同步的完整实现
    2003 IIS 发布WEB攻略
    FCKeditor.NET的配置、扩展与安全性经验交流
    js获取本地文件夹和文件 .
    前端必读:浏览器内部工作原理
    程序员第二定律:量化管理在程序员身上永无可能
  • 原文地址:https://www.cnblogs.com/light-sunset/p/13850911.html
Copyright © 2020-2023  润新知