zoukankan      html  css  js  c++  java
  • 位运算的常见操作

    常见运算符

    &:按位与。

    |:按位或。

    ~:按位非。

    ^:按位异或。(相同为0,否则为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。

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/xiaofeng-fu/p/13840507.html
Copyright © 2011-2022 走看看