• 位运算常见操作


    常见运算符

    &:按位与。

    |:按位或。

    ~:按位非。

    ^:按位异或。(相同为0,否则为1)

    <<:左位移运算符。

    >>:右位移运算符。

    <<<:无符号右移运算符。

    ########################################################################################

    一、^(异或)的性质:

    1.对于任何数x,都有 x^x=0,    x^0=x

    2.自反性:A^B^B=A^0=A

    特殊作用:翻转一个数(特定位翻转)

    例:X=10101110,使X低4位翻转,用X ^0000 1111 = 1010 0001即可得到。

    常见操作

    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。

  • 相关阅读:
    第十五节课:习题讲解
    第十四节课:字典
    Python第十三节课-文件的读取和写入
    Python第十二节课--循环语句与注释
    Python第十一节课--字符串的格式化
    Python第十节课==对象的方法
    Python第九节课--初识函数
    初识函数--文件的读取和打开,已一节课一节课分开,可不看
    刷题647. Palindromic Substrings
    刷题617. Merge Two Binary Trees
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/13227070.html
Copyright © 2020-2023  润新知