20201126计算机基础_位运算 电脑版发表于:2020/11/26 11:43 # [位运算](https://baike.baidu.com/item/%E4%BD%8D%E8%BF%90%E7%AE%97) > 程序中的所有数在计算机内存中都是以二进制的形式[储存](https://baike.baidu.com/item/储存/2446499)的。位运算就是直接对整数在内存中的二进制位进行[操作](https://baike.baidu.com/item/操作/33052)。比如,and运算本来是一个逻辑[运算符](https://baike.baidu.com/item/运算符),但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。 ## and和& > and 运算通常用于二进制的取位操作. > > 相同位的数字都为1, 则为1; 若有一个不为1, 则为0. 举例: ```go 位运算: 6&11 0110 1011 ----- 0010-> 位运算结果为: 2 ``` **小技巧 ** 1. 判断一个整数是奇数还是偶数 > and 1 的结果就是取二进制的最末位 (0/偶数 , 1/奇数) ## or和 | > or 运算通常用于二进制特定为的无条件赋值. > > 相同位只要一个为1 即为1. 举例: ```go or位运算: 6 or 11 0110 1011 ---- 1111-> 位运算结果为: 15 ``` **小技巧** 1. 强行把一个数变成最接近的偶数 > or 1 结果: 肯定是个奇数 , 然后-1. 变成偶数 ## xor 运算 ^ > 异或的符号是^。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. > > 相同位不同则为1, 相同则为0 举例: 1. 交换律方法可以历史这个^ 运算来实现 ```go 这种是利用加法和减法互为逆运算实现 a:=a + b; b:=a - b; a:=a - b; 实现a,b两个值交换 a:=a xor b; b:=a xor b; a:=a xor b; ... 这里我也看不懂. ``` ## not 运算~ >not运算的定义是把内存中的0和1全部取反。 ## ## shl运算<< >a shl b就表示把a转为二进制后左移b位(在后面添b个0) > >计算结果公a<<b =ax2的b次方 ## shr运算>> >和shl相似,a shr b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整) 小技巧: 1. [二分查找](https://baike.baidu.com/item/二分查找) 2. 堆的插入操作 3. 最大公约数的二进制算法用除以2操作来代替慢得出奇的mod运算,效率可以提高60%。 #**了解简单一点的位运算, 高级的位运算太复杂了 智商下线**