bin(),oct(),hex()返回二进制、八进制和十六进制的字符串,并且分别带有0b,0o,0x前缀
需要注意的是:
对于 bin(x)(x 为 十进制负数),输出的是它的原码的二进制表示加上一个负号
对于 bin(x)(x 为 十六进制负数),输出的是对应的二进制表示
所以为了获得十进制负数的补码,我们需要手动将其和 0xffffffff 进行与操作,得到一个十六进制数,再交给 bin() 转化,这时内存中得到的才是你想要的补码。
a = bin(-3)
print(a)
a = bin(3)
print(a)
b = bin(-3 & 0xffffffff)
print(b)
c = bin(0xfffffffd)
print(c)
# 输出
# -0b11
# 0b11
# 0b11111111111111111111111111111101
# 0b11111111111111111111111111111101
参考链接:
https://leetcode.cn/problems/convert-integer-lcci/solution/yi-huo-jie-fa-python-3-c-by-z1m/
进行进制转换后,常常伴随位运算操作,位运算操作包含:
&按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
<<左移
用来将一个数的各二进制位全部左移N位,右补0
\>>右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0
关于正负数的位运算的内容可以参考:
https://blog.csdn.net/weixin_44020969/article/details/103225825