首页 > 编程知识 正文

python读取二进制文件,Python十进制转二进制算法

时间:2023-05-03 20:54:19 阅读:154608 作者:307

这是探索布尔逻辑的好机会。 在

这样的二进制加法器可以用两个“半加法器”和一个“或”完成

首先是“半加法器”。 这是异或,给出加法输出和进位。 在

[按注释编辑: python确实有作为^实现的异或,但不是像andnotor这样的“单词”。 我保持着答案。 因为它解释了二进制加法背后的布尔逻辑。”

python没有XOR,所以我们必须写一个。

XOR本身是两个AND (有反向输入)和一个OR,如下所示:

结果是简单的函数,如下。 defxor(bit_a,bit_b ) :

a1=bit_aand(notbit_b ) ) )

a2=(notbit_a ) and bit_b

返回输入(a1ora2) )。

其他人可能想这样写:

^{pr2}$

这非常有效,但我用的是布尔型的例子。 在

下一步,它具有两个输入(比特) a,比特(b ) ),并对半加alpha进行编码,以提供两个输出(加法异或(defhalf_adder ) bit_a,bit_b ) : )

return(xor ) bit_b,bit_b ),bit_a and bit_b ) ) ) ) ) ) ) return(xor ) ) ) ) 65

因此,两个“半加法器”和一个“或”构成这样的“全加法器”。

如您所见,它有三个输入(bit_a、bit_b、carry )和两个输出(sum and carry )。 在python中,情况如下: deffull_adder(bit_a,bit_b,carry=0) :

sum1,Carry1=half_adder(bit_a,bit_b ) ) ) ) ) ) ) ) sum1,Carry1=half_adder(bit_a,bit_b ) ) ) ) )

sum2,Carry2=half_adder(sum1,carry ) ) ) ) ) ) )。

返回(sum 2,carry1 or carry2) )。

如果你想把全加器看成逻辑图,它应该是这样的:

接下来,你需要调用这个全加器。 从最低有效位(LSB )开始,以0为进位,再到最高有效位(MSB ),将进位作为下一步的输入。 以下所示的4位。

结果如下。 defbinary_string_adder(bits_a,bits_b ) :

嘉莉=0

result=' '

forIinrange(Len ) bits_a )-1,-1,-1) :

summ,carry=full_adder(int(bits_a[I],int ) bits_b[I],carry ) )

结果=str (summ )

result=str (进位)

return result[:-1]

如您所见,需要反转result字符串。 这是因为构建方法“错误”。 在

将它们整理成完整的工作代码: # boolean binary string adder

dfrjust_lenght(S1,s2,fill='0' ) ) :

l1,L2=Len(S1 ),len (S2 ) ) ) ) ) ) ) ) l1,L2=Len(S1 ),len (S2 ) ) ) ) ) ) ) ) l1 ) ) ) ) L2 ) ) ) L2 ) L2 ) L2 ) L2 )

if l1 l2:

S2=S2.rjust(L1,fill ) )。

elif l2 l1:

S1=S1.rjust(L2,fill ) )。

返回(S1,s2 ) )。

efget_input(:

bits _ a=input (inputyourfirstbinarystring ) )

bits _ b=input (inputyoursecondbinarystring ) )

returnrjust_lenght(bits_a,bits_b ) )。

defxor(bit_a,bit_b ) :

a1=bit_aand(notbit_b ) ) )

a2=(notbit_a ) and bit_b

返回输入(a1ora2) )。

efhalf_adder(bit_a,bit_b ) :

return(xor ) bit_b,bit_b ),bit_a and bit_b ) ) ) ) ) ) ) return(xor ) ) ) ) 65

effull_adder(bit_a,bit_b,carry=0) :

sum1,Carry1=half_adder(bit_a,bit_b ) ) ) ) ) ) ) ) sum1,Carry1=half_adder(bit_a,bit_b ) ) ) ) )

sum2,Carry2=half_adder(sum1,carry ) ) ) ) ) ) )。

返回(sum 2,carry1 or carry2) )。

defbinary_string_adder(bits_a,bits_b ) :

嘉莉=0

result=' '

forIinrange(Len ) bits_a )-1,-1,-1) :

summ,carry=full_adder(int(bits_a[I],int ) bits_b[I],carry ) )

结果=str (summ )

result=str (进位)

return result[:-1]

戴尔主(:

bits_a,bits_b=get_input (

print(1STstringofbitsis: (,) ) )、format ) bits_a,int ) bits_a,2 ) )

print(2ndstringofbitsis: (,) )、format ) bits_b、int ) bits_b、2 ) )

result=binary _ string _ adder (bits _ a,bits_b ) ) )。

打印(summarized is : (,() ),format ) result,int ) result,2 ) )

if __name__=='__main__':

main () )

照片的两个互联网来源:

有趣的是,三行就可以完成。 其中两行实际上正在获取输入。 bits _ a=input (inputyourfirstbinarystring ) )

bits _ b=input (inputyoursecondbinarystring ) )

print((03360b ) ).format ) int ) bits_a,2 ) int ) bits_b,2 ) )

在自己的代码中,如果在第2次以后的迭代中比特为0,则设定包含上次迭代进位的x=0。 在

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。