专栏文章

位运算

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioyudlp
此快照首次捕获于
2025/12/03 03:23
3 个月前
此快照最后确认于
2025/12/03 03:23
3 个月前
查看原文

位运算

左移

<<<<左移(shl)
x=1x=1 ,那么 x<<1x<<1 为2:
xx :          ~~~~~~~~~ 0000000000000001
x<<1x<<1 : 0000000000000010
所以 x<<1x<<1x2x*2 (但运算速度更快)
x<<ix<<ix2ix*2^i

右移

>>>>右移(shr)
类比左移。
x>>ix>>ix/2ix/2^i

或运算

|按位或(or)
xx :   ~~ 101
yy :   ~~ 010
xyx|y : 111
原理就是比较的两位中有1结果就为1,没有就为0。

与运算

& 即按位与(and)
xx :     ~~~~ 101
yy :     ~~~~ 010
xx&yy : 000
原理就是比较的两位中有0结果就为0,没有就为1。(与按位或相对)

非运算

~ 即按位取反(not)
xx :  ~ 101
~xx : 010
就是把每一位修改为相反的值。(0变1,1变0)

异或

^ 即按位异或(xor)
xx :    ~~~ 1010
yy :    ~~~ 1100
xx^yy : 0110
每一位相同为0,不同为1。

一些操作

  • 取一固定位值
    例:取从左向右第2位
    xx :                 ~~~~~~~~~~~~~~~~ 1010
    1<<11<<1 :       ~~~~~~ 0010
    xx&(1<<11<<1) : 0010
    某一位与上1,既保留原位。(0&1是0,1&1是1)
  • 设置固定位为0
    例:将从左向右第2位设为0
    xx :                    ~~~~~~~~~~~~~~~~~~~ 1010
    ~1<<11<<1 :        ~~~~~~~ 1101
    xx& ~(1<<11<<1) : 0010
    0可以将此位设为零,所以只要此位为零即可。(多位同理)
  • 固定位取反
    xx :                 ~~~~~~~~~~~~~~~~ 1010
    1<<11<<1 :       ~~~~~~ 0010
    xx^(1<<11<<1) : 0010
    某一位和1异或,1^1为0,0^1为1,达成取反的目的。
  • n位全为1
    (1<<n1<<n)1-1
  • ii 位改为1
    x=xx=x|(1<<1<<(i1i-1))
  • 去掉二进制下最右边的1
    x=xx=x&(x1x-1)或x=x-=(xx&(x-x))

评论

0 条评论,欢迎与作者交流。

正在加载评论...