剑指offer

因为很多题目跟力扣上的很相似,所以剑指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'

你可能感兴趣的:(剑指offer)