在python中打印二进制,然后在不使用1补码的情况下求反

在python中打印二进制,然后在不使用1补码的情况下求反,python,bit-manipulation,negate,Python,Bit Manipulation,Negate,我是python新手,尝试过这样做: a=23 "{0:b}".format(a) ---> '10111' 然后我想否定它,没有一个补码,结果应该是'01000',但似乎什么都不起作用 其次,我必须用0填充左侧,我发现类似的东西 "{0:12b}".format(a) ' 10111' 但这只会使字符串变长,并用空格填充 编辑:最适合我的解决方案是 "{0:12b}".format(a) '000000010110' "{0:12b}".format(~a) '111

我是python新手,尝试过这样做:

a=23
"{0:b}".format(a)

---> '10111'
然后我想否定它,没有一个补码,结果应该是'01000',但似乎什么都不起作用

其次,我必须用0填充左侧,我发现类似的东西

"{0:12b}".format(a)
'       10111'
但这只会使字符串变长,并用空格填充

编辑:最适合我的解决方案是

"{0:12b}".format(a)
'000000010110' 
"{0:12b}".format(~a)
'111111101001'

(这当然不起作用)

12
前面放一个
0
,将输出用零填充

In [1]: "{0:012b}".format(a)
Out[1]: '000000010111'
对于comp,您可以执行字符串操作或数学方法:

 In [2]: "{0:012b}".format(2**12-1-a)
 Out[2]: '111111101000'

只需将
2**12
更改为您希望显示的位数即可

是的,这很有效谢谢,您还有一个解决我的其他(主要)问题的方法?对于特定长度的comp,您也可以使用xor:
0xfff^num
。2**12是1后跟12个零。减去1得到12个一。从所有的1中减去任何东西都会切换位<代码>1-1=0和
1-0=1
。基本上,它执行@CorleyBrigman描述的
xor
操作。