位运算运算符理解
位运算:“&”,“|”,“^”,“~”,“<<”,“>>”
“&”:逻辑与
例子:a&b
a:1 0 1 1 0 1
&
b:1 1 0 1 1 0
1 0 0 1 0 0
两种理解方法:
① 每一位上的数字和1相“与”,得到这个数字本身
每一位上的数字和0相“与”,得到0
② 每一位上数字的乘法运算,11=1 10=0 01=0 00=0
“|”:逻辑或
例子:a|b
a:1 0 1 1 0 1
|
b:1 1 0 1 0 0
1 1 1 1 0 1
两种理解方法:
① 每一位上的数字和1相“或”,得到1
每一位上的数字和0相“与”,得到这个数字本身
② 每一位上数字的加法运算,1+1=1 1+0=1 0+1=1 0+0=0
“^”:逻辑异或
注:任何数字与1异或相当于对此数字取反
例子:a^b
a:1 0 1 1 0 1
^
b:1 1 0 1 1 0
0 1 1 0 1 1
理解方法:
各对应位置的数字,相同为0,不同为1。
“~”:取反
例子:~a
a:1 0 1 1 0 1
~
0 1 0 0 1 0
理解方法:
0变1 1变0
“<<”:左移运算
例子:a<<3
a : 1 0 1 1 0 1
a << 3
1 0 1 0 0 0
理解方法:数字整体左移,空出来的地方用0填充
“>>”:右移运算
例子:a>>3
a : 1 0 1 1 0 1
a << 3
0 0 0 1 0 1
理解方法:数字整体右移,空出来的地方用0填充
例题:
给定二进制字符串s,取出第n位
解析:二进制字符串倒数第1位为第0位,依次向前递推
例子:
s :1 0 1 1 0 1
要求取出第2位
方法: (s>>2)&1
解释:s>>2
得到 s 0 0 1 0 1 1
s & 1
0 0 1 0 1 1
0 0 0 0 0 1
—————
1