
一、前言
在算法题目中,有一些解法往往是需要借助位运算来解决,因此在这一章中我们就为大家介绍一些常见的位运算。
二、正文
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
注意:按位异或的运算符的结果与无进位相加后的结果相同


