目录
x &= (x - 1) ---等价---> 把x最低位的二进制1给去掉
位运算知识
1.位运算的由来
在计算机里面,任何数据最终都是用数字来表示的,并且计算机运算单元只认识高低电位,转化成我们认识的逻辑,也就是 0 1 。这就是导致计算机里面任何数据最终都是用二进制来保存的数字。
2.位运算符号
3.常用位运算
判断奇偶
(x & 1) == 1 ---等价---> (x % 2 == 1)
(x & 1) == 0 ---等价---> (x % 2 == 0)
x / 2 ---等价---> x >> 1
为什么x右移一位等于x除以2呢?
位运算是通过二进制位转化到十进制,计算方式即二项展开式的求和结果,右移一位相当于所有位下降一级,即对二项展开式整体除以2.
ps:如果x为负数,右移一位后,最高位补1,即算术右移
x &= (x - 1) ---等价---> 把x最低位的二进制1给去掉
x & -x ---等价---> 得到最低位的1
x & ~x ---等价---> 0
4.指定位置的位运算
- 将X最右边的n位清零:x & (~0 << n)
- 获取x的第n位值:(x >> n) & 1
- 获取x的第n位的幂值:x & (1 << n)
- 仅将第n位置为1:x | (1 << n)
- 仅将第n位置为0:x & (~(1 << n))
- 将x最高位至第n位(含)清零:x & ((1 << n) - 1)
- 将第n位至第0位(含)清零:x & (~((1 << (n + 1)) - 1))
5.异或结合律
x ^ 0 = x, x ^ x = 0 x ^ (~0) = ~x, x ^ (~x) = ~0
a ^ b = c, a ^ c = b, b ^ c = a (有没有点乘法结合律的意思)
字母表示:(a ^ b) ^ c = a ^ (b ^ c)
图形表示:(☆ ^ ◇) ^ △ = ☆ ^ (◇ ^ △)
6.大小字母位运算
大写变小写、小写变大写:
字符 ^= 32 (大写 ^= 32 相当于 +32,小写 ^= 32 相当于 -32)
大写变小写、小写变小写:
字符 |= 32 (大写 |= 32 就相当于+32,小写 |= 32 不变)
大写变大写、小写变大写:
字符 &= -33 (大写 ^= -33 不变,小写 ^= -33 相当于 -32)
把字母当成 8 个bit 位来看,我把大小字母对应的后 4 位圈出来了。
大家有没有发现 A-a B-b ... Z-z 26个字母之间的大小写的后 4 位是完全一样的!!!
(重要知识点1:对应大小字母的 后4位二进制是一样的,后4位二进制是一样的,后4位二进制是一样的)
再来看一下头 4位。对应大小字母之间就第 3位 的 bit 值不一样!!!
(重要知识点2:对应大小字母的前4位中,只有第3位bit值不一样,只有第3位bit值不一样,只有第3位bit值不一样)
把不一样的bit位单独取出来,其它位补 0,也就是 0010 0000,对应的十进制数就是 32 !!!
例题
大家试着使用上面的技巧尝试一下吧!!!
本文来源LC疯子博主的两篇评论
标签:运算,32,背下,大写,---,等价,小写,应该 From: https://blog.csdn.net/fen_0108/article/details/139151438