因为很多题目跟力扣上的很相似,所以剑指offer上的就挑着总结吧...
1. 二进制中1的个数
原题
做这个题本来的解决思路:bin(n)
然后统计'1'
的个数,但由于题目说明负数是以补码表示,所以当n<0
时无法通过。
明确一下:
① python中整型是以补码的形式存储的,正数的原码、反码、补码一致,而负数的原码、反码、补码不一致,需要按照一定的规则进行计算。
② python中bin(负数)
、hex(负数)
输出为其正数原码二进制、十六进制表示加一个负号:
>>> bin(-3)
'-0b11'
>>> hex(-3)
'-0x3'
③ python中如何获取补码?
和0xffffffff按位与是针对不超过32位的数
# 对正数而言,原码即为补码
>>> bin(10)
'0b1010'
# 对负数而言 将其与0xffffffff按位与之后得到负数的补码
>>> bin(-10)
'-0b1010'
>>> bin(-10&0xffffffff) #具体操作为:1.负数取反码加一 2.按位与
'0b11111111111111111111111111110110'