我钟爱位运算,亦如炉石拿着最原始的卡组打着最艰难的怪……
概述
从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/) 都是叫位运算,即将符号位共同参与运算的运算。
位运算概览
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都为 1 时,结果才为 1 |
| | 或 | 两个位都为 0 时,结果才为 0 |
^ | 异或 | 两个位相同为 0,相异为 1 |
~ | 取反 | 0 变 1,1 变 0 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补 0 |
|右移 | 各二进位全部右移若干位,对无符号数,高位补 0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
LeetCode 精题
异或
(爱别人胜过爱自己)
$a$ $^$ $a$ $=0$: 自己异或自己等于 0
$a$ $^$ $0$ $=a$:任何数字和0异或还等于他自己
$a$ $^$ $b$ $^$ $c$=$a$ $^$ $c$ $^$ $b$;异或运算具有交换律