应该背下的位运算

目录

位运算知识

1.位运算的由来

2.位运算符号​编辑

3.常用位运算 

判断奇偶

x / 2  ---等价--->  x >> 1

x &= (x - 1)    ---等价--->   把x最低位的二进制1给去掉

x & -x   ---等价--->   得到最低位的1

x & ~x  ---等价--->   0

4.指定位置的位运算

5.异或结合律

6.大小字母位运算

大写变小写、小写变大写:

大写变小写、小写变小写:

大写变大写、小写变大写:

例题


位运算知识

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.指定位置的位运算

  1. 将X最右边的n位清零:x & (~0 << n)
  2. 获取x的第n位值:(x >> n) & 1
  3. 获取x的第n位的幂值:x & (1 << n)
  4. 仅将第n位置为1:x | (1 << n)
  5. 仅将第n位置为0:x & (~(1 << n))
  6. 将x最高位至第n位(含)清零:x & ((1 << n) - 1)
  7. 将第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 !!!

例题

190. 颠倒二进制位

191. 位1的个数

231. 2 的幂

338. 比特位计数

709. 转换成小写字母

大家试着使用上面的技巧尝试一下吧!!!

本文来源LC疯子博主的两篇评论

  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值