[算法]——常见位运算总结
目录
一、前言
二、正文
1.基础的位运算
①左移运算符:<<
②右移运算符:>>
③取反运算符:~
④按位与运算符:&
⑤按位或运算符:|
⑥按位异或运算符:^
2.常见位运算组合
①给定一个数n,确定它的二进制表示中的第x位是0还是1
②将一个数n的二进制表示的第x位修改成1
③将一个数n的二进制表示的第x位修改成0
④位图
⑤提取一个数(n)二进制表示中最右侧的1
⑥干掉一个数(n)二进制表示中最右侧的1
⑦位运算的优先级
⑧异或运算的运算律
3.例题
●191.位1的个数
●338.比特位计数
●461.汉明距离
●136.只出现一次的数字
●260.只出现一次的数字Ⅲ
三、结语
一、前言
在算法题目中,有一些解法往往是需要借助位运算来解决,因此在这一章中我们就为大家介绍一些常见的位运算。
二、正文
1.基础的位运算
①左移运算符:<<
★功能:用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位
★用法:操作数<<移动位数
★示例:5<<2 就是将5的所有二进制101左移两位变成10100,也就是20
②右移运算符:>>
★功能:将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位
★用法:操作数>>移动位数
★示例:5>>2 就是将5的所有二进制101右移两位变成001,也就是1
③取反运算符:~
★功能:将一个数的二进制表达的每一位取反,即0变为1,1变为0
★用法:~操作数
★示例:~111……0最后得到一串的0加上最后一位的1
④按位与运算符:&
★功能:参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为1。参与运算的两个数均以补码出现。
★用法:操作数1&操作数2
★示例:1&2,即001&010,最后结果为000
⑤按位或运算符:|
★功能:参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。当参与运算的是负数时,参与两个数均以补码出现。
★用法:操作数1&操作数2
★示例:1|2,即001 | 010,最后结果为011
⑥按位异或运算符:^
★功能:用于对两个二进制数的每一位进行异或运算。具体来说,如果参与运算的两个位中只有一个为1,则结果位为1;如果两个位都为0或都为1,则结果位为0。
★用法: 操作数1 ^ 操作数2
★示例:1^2,即001^010,最后结果为011
注意:按位异或的运算符的结果与无进位相加后的结果相同
2.常见位运算组合
在讲解完基础的位运算,接下来我就对这些位运算进行组合来实现比较基础的操作
①给定一个数n,确定它的二进制表示中的第x位是0还是1
★操作:(