第十一天(位运算)

今天完成题目:342,231,1668,1670,476,191 342:4的幂

  • 通过列出数学式子,可以证明,4^a = 2^(2a),所以只要证明其指数是偶数即可

  • 通过num > 0 and num & (num - 1) == 0 and num & 0xaaaaaaaa == 0,根据位特征判断

  • 通过膜运算,2^k mod 3 = 2, 4^k mod 3 = 1,来区分2和4

231:2的幂

  • 通过num > 0 and num & (num - 1) == 0,根据位特征判断

1668:插入

  • '{:032b}'.format(N)可以将整数换成32位二进制

  • 可以使用掩码,将需要改变的位置为0,不需要的置为1,通过&运算截取,通过|运算添加.

1670:翻转数位

  • 逻辑清楚即可

476:数字的补位

  • 正常取反是有前导零位的

  • 这里通过字符的方法可以变成没有前导零位的取反

191:位1的个数

  • 跟前面某题一样bin(n).count('1')即可

最后更新于

这有帮助吗?