如何在python上进行二进制加法?

我很难正确地将它们添加在一起。我有点碰到了砖墙。我已经转换了它,仅此而已。
我的代码:

选择 | 换行 | 行号
  1. class BinaryNumber:
  2.     '''A Binary Number Class'''
  3.     #pass
  4.     def __init__(self, bitString = ''):
  5.         '''Constructor'''
  6.         #pass
  7.         self._bits = bitString
  8.  
  9.     def __str__(self):
  10.         '''string representation'''
  11.         if self._bits:
  12.             return self._bits
  13.         else:
  14.             return '0'
  15.  
  16.     def __int__(self):
  17.         '''conversion'''
  18.         #pass
  19.         total = 0
  20.         for pos in range(len(self._bits)):
  21.             if self._bits[pos] == '1':
  22.                 total += 2 ** (len(self._bits) - 1 - pos)
  23.         return total
  24.  
  25.     def __add__(self, other):
  26.         '''addition: implementation of the + operator'''
  27.         pass
  28.  

我也不允许导入数学。
任何帮助将非常感激! :]]

# 回答1


您需要的只是将小数整数转换为二进制。然后你的魔法方法
__添加__
将会:

选择 | 换行 | 行号
  1.     def __add__(self, other):
  2.         '''addition: implementation of the + operator'''
  3.         return self.dec2bin((int(self)+int(other)))

您是否尝试为此编写代码?

# 回答2


我尝试了使用"导入数学"的类似代码,并尝试将其更改以使其正常工作,但事实并非如此。
这是我现在的项目的所有代码:

选择 | 换行 | 行号
  1. # Program: ex6_18.py
  2. # Authors: Robert Mineweaser
  3. #
  4. # This example is discussed in Chapter 6 of the book
  5. # Object-Oriented Programming in Python
  6. #
  7.  
  8. class BinaryNumber:
  9.     '''A Binary Number Class'''
  10.     #pass
  11.     def __init__(self, bitString = ''):
  12.         '''Constructor'''
  13.         #pass
  14.         self._bits = bitString
  15.  
  16.     def __str__(self):
  17.         '''string representation'''
  18.         if self._bits:
  19.             return self._bits
  20.         else:
  21.             return '0'
  22.  
  23.     def __int__(self):
  24.         '''conversion'''
  25.         #pass
  26.         total = 0
  27.         for pos in range(len(self._bits)):
  28.             if self._bits[pos] == '1':
  29.                 total += 2 ** (len(self._bits) - 1 - pos)
  30.         return total
  31.  
  32.     def __add__(self, other):
  33.         '''addition: implementation of the + operator'''
  34.         #pass
  35.         '''carry = 0
  36.         result = ''
  37.  
  38.         # Work from right to left.
  39.         for i in range(0, len(self._bits))[::-1]:
  40.             tmp = int(((a[i]) + int(b[i]) + carry)/2)
  41.             res = str(int(a[i]) + int(b[i]) + carry - 2 * tmp)
  42.             result += res
  43.             carry = tmp
  44.  
  45.         result = (result + str(carry))[::-1]
  46.         try:
  47.             return result[result.index('1'):]
  48.         except ValueError, ex:
  49.             return '0'
  50.               '''
  51.         return self.dec2bin((int(self)+int(other)))
  52.  
  53.     def __subtract__(self, other):
  54.         '''subtraction: implementation of the - operator'''     # Optional
  55.         pass
  56.  
  57.     def __lt__(self, other):
  58.         '''less: implementation of the < operator'''
  59.         #pass
  60.         if int(a) <= int(b):
  61.             return True
  62.         else:
  63.             return False
  64.  
  65.     def __gt__(self, other):
  66.         '''great: implementation of the > operator'''
  67.         #pass
  68.         if int(a) >= int(b):
  69.             return True
  70.         else:
  71.             return False
  72.  
  73.     def __eq__(self, other):
  74.         '''equal: implementation of the = operator'''
  75.         #pass
  76.         if int(a) == int(b):
  77.             return True
  78.         else:
  79.             return False
  80.  
  81.  
  82. if __name__ == '__main__':
  83.     a  = BinaryNumber('01111001')   # binary numbers must start with 0
  84.     b  = BinaryNumber('00110101')   # a = 121, b = 53
  85.     print 'a = ', a, int(a)
  86.     print 'b = ', b, int(b)
  87.  
  88.     print 'a + b', a + b, int(a + b)
  89.     #print 'a - b', a - b, int(a - b)    # optional
  90.  
  91.     print 'a < b', a < b
  92.     print 'a > b', a > b
  93.     print 'a == b', a == b
  94.  
  95. print 'Press the Enter key to finish'
  96.  
  97. raw_input()
  98.  

如果您不知道,减法是可选的,我评论了我尝试更改以进行工作的代码。关于我可以采取的措施解决此问题的任何建议。

# 回答3


功能DEC2BIN()将是类方法。查看

这个线程


# 回答4


好吧。将其添加在一起后,我需要输出将其显示为" A + B(二进制结果)(十进制结果)。如何使其将它们添加在一起并显示出两者的结果?
# 回答5


修改__ADD__返回的字符串,并使用字符串格式。未经测试:

选择 | 换行 | 行号
  1. return "%s + %s (%s) (%s)" % (self, other, self.dec2bin((int(self)+int(other))), (int(self)+int(other)))
# 回答6


我仍然有点困惑。我需要做的就是将2个二进制数添加在一起,并使输出为" A + B(二进制结果)(十进制结果)"。 conversion依是给我十进制的结果。那么,如何将所有内容添加在一起以获得给定的输出" A + B(二进制结果)(十进制结果)"?如果您不明白我要问什么,请随时告诉我。
这是我的原始代码" __ADD__",没有我的任何添加:

选择 | 换行 | 行号
  1. class BinaryNumber:
  2.     '''A Binary Number Class'''
  3.     #pass
  4.     def __init__(self, bitString = ''):
  5.         '''Constructor'''
  6.         #pass
  7.         self._bits = bitString
  8.  
  9.     def __str__(self):
  10.         '''string representation'''
  11.         if self._bits:
  12.             return self._bits
  13.         else:
  14.             return '0'
  15.  
  16.     def __int__(self):
  17.         '''conversion'''
  18.         #pass
  19.         total = 0
  20.         for pos in range(len(self._bits)):
  21.             if self._bits[pos] == '1':
  22.                 total += 2 ** (len(self._bits) - 1 - pos)
  23.         return total
  24.  
  25.     def __add__(self, other):
  26.         '''addition: implementation of the + operator'''
  27.         pass
  28.  
  29.     def __subtract__(self, other):
  30.         '''subtraction: implementation of the - operator'''     # Optional
  31.         pass
  32.  
  33.     def __lt__(self, other):
  34.         '''less: implementation of the < operator'''
  35.         #pass
  36.         if int(a) <= int(b):
  37.             return True
  38.         else:
  39.             return False
  40.  
  41.     def __gt__(self, other):
  42.         '''great: implementation of the > operator'''
  43.         #pass
  44.         if int(a) >= int(b):
  45.             return True
  46.         else:
  47.             return False
  48.  
  49.     def __eq__(self, other):
  50.         '''equal: implementation of the = operator'''
  51.         #pass
  52.         if int(a) == int(b):
  53.             return True
  54.         else:
  55.             return False
  56.  
  57. if __name__ == '__main__':
  58.     a  = BinaryNumber('01111001')   # binary numbers must start with 0
  59.     b  = BinaryNumber('00110101')   # a = 121, b = 53
  60.     print 'a = ', a, int(a)
  61.     print 'b = ', b, int(b)
  62.  
  63.     print 'a + b', a + b, int(a + b)
  64.     #print 'a - b', a - b, int(a - b)    # optional
  65.  
  66.     print 'a < b', a < b
  67.     print 'a > b', a > b
  68.     print 'a == b', a == b
  69.  
  70. print 'Press the Enter key to finish'
  71.  
  72. raw_input()
  73.  
# 回答7


在此线程中查看我的第一篇文章。
# 回答8


是的,但是即使我把它放进去,我也会遇到一个错误," attributeError:binarynumber实例没有属性'dec2bin'"。我必须如何制作此代码才能使其正确添加二进制数字,并为我提供输出," A + B(二进制结果)(十进制结果)"?
# 回答9


您必须添加二进制方法DEC2BIN()。该方法必须返回转换为二进制的小数号。
# 回答10


这是唯一的方法吗?还是有另一种可能的方式?如果没有,我该怎么做?
# 回答11


那就是我这样做的方式,因为这对我来说是最简单的。不过还有其他方法。您可以编写代码以在方法中进行二进制加法和减法
__添加__()

__SUB __()
分别。查看

这个网站


# 回答12


我了解二进制添加的概念,但是我很难将其放入代码中。我将如何在方法中编写二进制代码
__添加__

# 回答13


对不起,我无法为您编写代码。请自己展示一些努力,然后我们可以提供帮助。由于您了解二进制添加的概念,因此您可能比我了解更多。
即使您添加了二元添加,我也 NK代码应进入单独的函数。
# 回答14

你好 在我看来,由于您正在实施自己的版本,因此您不妨在二进制中进行添加。 如果我没记错的话,您的Bortstring只是1s和0s的字符串? 因此,我首先要实现在给定位置返回单个数字的东西。 就像是:

选择 | 换行 | 行号
  1. def binDigit[self,position]:
  2.     if position>len(self._bits):
  3.         return 0
  4.     else:
  5.         return self._bits[-position]

如果self._bits =" 101",则位置[1] = 1,位置[2] = 0,位置[3] = 1和位置[4] = 0等。 现在创建一些可以添加一点的东西(从字面上看!):

选择 | 换行 | 行号
  1. def __add__[self,other]:
  2.     v=max([len(self._bits),len(other._bits)])+1
  3.     ans=''
  4.     carry=0
  5.     for i in range(1,v+1):
  6.         a=self.position(i)
  7.         b=self.position(i)
  8.         t=carry+int(a)+int(b)        
  9.         if t<=1:
  10.             carry=0
  11.         else:
  12.             carry=1        
  13.         if t%2==0:
  14.             ans='0'+ans
  15.         else:
  16.             ans='1'+ans
  17.     return BinaryNumber(ans)
  18.  

我尚未检查任何内容,但应该给您一些想法。

标签: python

添加新评论