去掉最后一位:
示例:
(101101⇒10110)
(
101101
⇒
10110
)
位运算:
x>>1
x
>>
1
在最后加一个0
示例:
(101101⇒1011010)
(
101101
⇒
1011010
)
位运算:
x<<1
x
<<
1
在最后加一个1
示例:
(101101⇒1011011)
(
101101
⇒
1011011
)
位运算:
(x<<1)+1
(
x
<<
1
)
+
1
把最后一位变成1
示例:
(101100⇒101101)
(
101100
⇒
101101
)
位运算:
x|1
x
|
1
把最后一位变成0
示例:
101101⇒101100
101101
⇒
101100
位运算:
(x|1)−1
(
x
|
1
)
−
1
最后一位取反
示例:
(101101⇒101100)
(
101101
⇒
101100
)
位运算:
xxor1
x
x
o
r
1
把右数第k位变成1
示例:
(101001⇒101101,k=3)
(
101001
⇒
101101
,
k
=
3
)
位运算:
x|(1<<(k−1))
x
|
(
1
<<
(
k
−
1
)
)
把右数第k位变成0
示例:
(101101⇒101001,k=3)
(
101101
⇒
101001
,
k
=
3
)
位运算:
x and (1<<(k−1))
x
a
n
d
(
1
<<
(
k
−
1
)
)
右数第k位取反
示例:
(101001⇒101101,k=3)
(
101001
⇒
101101
,
k
=
3
)
位运算:
x(xor(1<<(k−1)))
x
(
x
o
r
(
1
<<
(
k
−
1
)
)
)
取整数n在二进制表示下的第k位
位运算:
(n>>k) and 1
(
n
>>
k
)
a
n
d
1
取整数n在二进制表示下的后k位
位运算:
n and ((1<<k)−1)
n
a
n
d
(
(
1
<<
k
)
−
1
)
取末k位
示例:
(1101101⇒1101,k=4)
(
1101101
⇒
1101
,
k
=
4
)
位运算:
x and ((1<<k)−1)
x
a
n
d
(
(
1
<<
k
)
−
1
)
取右数第k位
示例:
(1101101⇒1,k=4)
(
1101101
⇒
1
,
k
=
4
)
位运算:
x>>(k−1) and 1
x
>>
(
k
−
1
)
a
n
d
1
把末k位变成1
示例:
(101001⇒101111,k=4
(
101001
⇒
101111
,
k
=
4
位运算:
x|((1<<k)−1)
x
|
(
(
1
<<
k
)
−
1
)
末k位取反
示例:
(101001⇒100110,k=4
(
101001
⇒
100110
,
k
=
4
位运算:
x xor ((1<<k)−1)
x
x
o
r
(
(
1
<<
k
)
−
1
)
把右边连续的1变成0
示例:
(100101111⇒100100000)
(
100101111
⇒
100100000
)
位运算:
x and (x+1)
x
a
n
d
(
x
+
1
)
把右起第一个0变成1
示例:
(100101111⇒100111111
(
100101111
⇒
100111111
位运算:
x|(x+1)
x
|
(
x
+
1
)
把右边连续的0变成1
示例:
(11011000⇒11011111)
(
11011000
⇒
11011111
)
位运算:
x|(x−1)
x
|
(
x
−
1
)
取右边连续的1
示例:
(100101111⇒1111)
(
100101111
⇒
1111
)
位运算:
(x xor (x+1))>>1
(
x
x
o
r
(
x
+
1
)
)
>>
1
去掉右起第一个1的左边
示例:
(100101000⇒1000)
(
100101000
⇒
1000
)
位运算:
x and (x xor (x−1))
x
a
n
d
(
x
x
o
r
(
x
−
1
)
)