python读取二进制,10进制转2进制python
这是探索布尔逻辑的好机会。在
这样的二进制加法器可以用两个"半加法器"和一个"或"完成
首先是"半加法器"。这是异或,给出加法输出和进位。在
[按注释编辑:python确实有作为^实现的异或,但不是像andnotor这样的"单词"。我保持着答案。因为它解释了二进制加法背后的布尔逻辑。"
大蟒没有异或,所以我们必须写一个。
异或运算本身是两个以及(有反向输入)和一个或者,如下所示:
结果是简单的函数,如下defxor(bit_a,bit_b):
a1=位_ a(非位_b)))
a2=(notbit_a)和位_b
返回输入(a1ora2))。
其他人可能想这样写:
^{pr2}$
这非常有效,但我用的是布尔型的例子。在
下一步,它具有两个输入(比特)a,比特(b)),并对半加希腊字母的第一个字母进行编码,以提供两个输出(加法异或(defhalf_adder ) bit_a,bit_b):)
return(xor ) bit_b,bit_b),bit_a和bit _ b))))))return(xor)))))65
因此,两个"半加法器"和一个"或"构成这样的"全加法器"。
如您所见,它有三个输入(位答:位乙、进位)和两个输出(求和并进位).在大蟒中,情况如下:deffull_adder(bit_a,bit_b,进位=0):
sum1,Carry1=half_adder(bit_a,bit_b))))))sum 1,Carry1=half_adder(bit_a,bit _ b)))))
sum2,Carry2=half_adder(sum1,Carry)))))))。
返回(总和2,进位一或进位2).
如果你想把全加器看成逻辑图,它应该是这样的:
接下来,你需要调用这个全加器。从最低有效位(最低有效位)开始,以0为进位,再到最高有效位(MSB),将进位作为下一步的输入。以下所示的四位。
结果如下defbinary_string_adder(bits_a,bits_b):
嘉莉=0
结果=
forIinrange(Len ) bits_a )-1,-1,-1):
summ,carry=full_adder(int(bits_a[I],int ) bits_b[I],carry))
结果=字符串(总和)
结果=字符串(进位)
返回结果[:-1]
如您所见,需要反转结果字符串。这是因为构建方法"错误"。在
将它们整理成完整的工作代码:#布尔二进制字符串加法器
DFR just _ length(S1 S2 fill= 0 ):
l1、L2=伦(S1)伦(S2)))))))))L1、L2=伦(S1)伦(S2)))))))))L1)、L2)、L2 ) L2 ) L2 ) L2)
如果l1 l2:
S2=S2.rjust(L1,填充)).
elif l2 l1:
S1=S1.rjust(L2,填充)).
返回(S1,s2)。
efget_input(:
bits _ a=输入(inputyourfirstbinarystring))
bits _ b=输入(inputyoursecondbinarystring))
returnr just _ length(bits _ a,bits_b))。
defxor(bit_a,bit_b):
a1=位_ a(非位_b)))
a2=(notbit_a)和位_b
返回输入(a1ora2))。
efhalf_adder(bit_a,bit_b):
return(xor ) bit_b,bit_b),bit_a和bit _ b))))))return(xor)))))65
e全加器(位a,位b,进位=0):
sum1,Carry1=half_adder(bit_a,bit_b))))))sum 1,Carry1=half_adder(bit_a,bit _ b)))))
sum2,Carry2=half_adder(sum1,Carry)))))))。
返回(总和2,进位一或进位2).
defbinary_string_adder(bits_a,bits_b):
嘉莉=0
结果=
forIinrange(Len ) bits_a )-1,-1,-1):
summ,carry=full_adder(int(bits_a[I],int ) bits_b[I],carry))
结果=字符串(总和)
结果=字符串(进位)
返回结果[:-1]
戴尔主(:
位_a,位_ b=获取_输入(
print(1 tstringofbits is:(,) )、format ) bits_a,int ) bits_a,2))
print(2ndstringofbitsis:(,)、format ) bits_b、int ) bits_b、2))
result=binary _ string _ adder(bits _ a,bits_b))。
打印(概括起来就是: (,() ),format)结果,int)结果,2))
if __name__==__main__ :
main())
照片的两个互联网来源:
有趣的是,三行就可以完成。其中两行实际上正在获取输入bits _ a=输入(inputyourfirstbinarystring))
bits _ b=输入(inputyoursecondbinarystring))
打印((03360b)).格式)int ) bits_a,2 ) int ) bits_b,2))
在您自己的代码中,如果在第二次迭代和以后的迭代中该位为0,则设置x=0,包含最后一次迭代的进位。在
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。