> 技术文档 > [算法]——常见位运算总结

[算法]——常见位运算总结

目录

一、前言

二、正文

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

操作(