如何在数学中使用base2

时间:2018-05-29 04:11:47

标签: python python-2.7 math binary

我有一个base2值列表(每个5位数):

[10000, 10001, 10010, 10011, 10100, 10101, 10110, 10111, 11000, 11001, 11010, 11011, 11100, 11101, 11110, 11111]

有没有办法在base2中用它们进行数学运算?例如,10001 + 1110 = 11111

10000 - 1 = 1111

编辑:我只关心加法和减法。

6 个答案:

答案 0 :(得分:4)

默认情况下,您编写的任何数字都以10为基数。因此,当您键入10000时,实际上您编写的数字数万

以二进制输入数字

如果您想指定以二进制编写数字,请使用0b前缀。

>>> 0b10000
16

如果由于任何原因无法更新代码以添加上述前缀,则可以使用此辅助函数将十进制表示法转换为二进制值。

def decimal_notation_to_binary(x):
    return int(str(x), 2)

示例:

>>> decimal_notation_to_binary(10000)
16

获取数字的二进制表示

或者,如果您想要的是数字的二进制表示,请使用bin内置函数。

>>> bin(42)
'0b101010'

算术

对于算术,二进制数和十进制数之间的差异只是Python在屏幕上写入的方式,在内存中所有整数都存储为二进制。这意味着你可以用二进制给出的数字算术,就像你对任何数字一样。

>>> 0b10000 + 0b1000
24

事实上,作为您输入数字的基础无关的证据,您甚至可以添加二进制,十进制和十六进制数字。

>>> 0b100 + 0x1f + 7
42

答案 1 :(得分:1)

@Naji ,请看下面的代码示例。

  

您可以多次使用 int() bin()功能来满足您的目标。

a = 10000
b = 1

# Base 2 addition
result1 = (bin( int(str(a), 2) - int(str(b), 2) )[2:] # 1111

# Base 2 subtraction
result2 = bin( int(str(a), 2) + int(str(b), 2) )[2:]  # 10001

»试用Python的交互式控制台

>>> # Base 2 subtraction & addition 
...
>>> a = 10000
>>> b = 1
>>>
>>> result = bin( int(str(a), 2) - int(str(b), 2) )
>>> result
'0b1111'
>>>
>>> result = bin( int(str(a), 2) + int(str(b), 2) )
>>> result
'0b10001'
>>>
>>> result = bin( int(str(a), 2) - int(str(b), 2) )[2:]
>>> result
'1111'
>>>
>>> result = bin( int(str(a), 2) + int(str(b), 2) )[2:]
>>> result
'10001'
>>>

让我们尝试添加您在问题中指定的所有二进制数。

>>> binaries = [10000, 10001, 10010, 10011, 10100, 10101, 10110, 10111, 11000, 11001, 11010, 11011, 11100, 11101, 11110, 11111]
>>>
>>> decimals = [int(str(binary), 2) for binary in binaries]
>>> decimals
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
>>>
>>> sum(decimals)
376
>>>
>>> bin(sum(decimals))
'0b101111000'
>>>
>>> bin(sum(decimals))[2:]
'101111000'
>>>

最后,我们可以设计我们自己的函数,它会在加法或减法后产生精确的双边字符串(即0b前面没有0b1111)。

# ********* BASE2 ADDITION ***************
def base2_addition(a, b):
    try:
        int_a = int(str(a), 2) 
        int_b = int(str(b), 2) 

        return bin(int_a + int_b)[2:] 
    except:
        print ("Invalid input provided (Expected 2 binary strings/numbers with 0s and 1s")
        return None

print base2_addition('10000', '1')   # 10001
print base2_addition('10001', '011') # 10100

# ********* BASE2 SUBTRACTION **************
def base2_subtraction(a, b):
    try:
        int_a = int(str(a), 2) 
        int_b = int(str(b), 2) 

        return bin(int_a - int_b)[2:] 
    except:
        print ("Invalid input provided (Expected 2 binary strings/numbers with 0s and 1s")
        return None

print(base2_subtraction('10100', '101')) # 1111

答案 2 :(得分:0)

您可以转换为int,执行操作,然后转换回二进制 例如:

print(bin(int(' 1001',base = 2)+ int(' 1011',base = 2))[2:])

答案 3 :(得分:0)

您正在使用的数字是基数10表示。您可以使用0b作为前缀,使其成为基础2 0b10001 + 0b1110,等于310b11111)。

答案 4 :(得分:0)

假设您希望将这些int数字视为二进制数字,首先需要将它们转换为二进制数字:

In []:
lst = [10000, 10001, 10010, 10011, 10100, 10101, 10110, 10111, 11000, 11001, 11010, 11011, 11100, 11101, 11110, 11111]
blst = [int(str(n), 2) for n in lst]
print(blst)

Out[]:
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

int的默认设置是打印基数10,因此基数为10 0b1000016。 即使使用二进制文字,例如:

In []:
[0b10000, 0b10001, 0b10010, 0b10011, 0b10100, 0b10101]

Out[]:
[16, 17, 18, 19, 20, 21]

您可以将它们打印为二进制文件:

In []:
print(' '.join(format(n, 'b') for n in blst))

Out[]:
10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111

您可以添加和删除这些值,只要您以二进制格式打印出来,它就会如您所愿,例如从所有这些中减去0b1

In []:
print(' '.join(format(n - 0b1, 'b') for n in blst))

Out[]:
1111 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110

并添加0b1110

In []:
print(' '.join(format(n + 0b1110, 'b') for n in blst))

Out[]:
11110 11111 100000 100001 100010 100011 100100 100101 100110 100111 101000 101001 101010 101011 101100 101101

答案 5 :(得分:0)

根据{ "boundingBox": [ 2, 52, 65, 46, 69, 89, 7, 95 ], "text": "dog", . . . 文档字符串,需要intint数据类型

long

Docstring: int(x=0) -> int or long int(x, base=10) -> int or long 需要bin

str

由于您的列表属于Docstring: bin(number) -> string 而不是base10,因此它不是最漂亮也不是最快,我会将您的base2列表转换为base10通过铸造输入并进行数学计算。 既然你提到你只关心减法或加法,我加了变量X来控制你的减法或加法。

注意:我认为此处的变量X采用base2格式化的base2string,因此您只需提供{{{ 1}}或int值。如果输入任何大于或等于2的数字,它会抛出X = '1000'异常,例如:X = 1000ValueError

X = 1112

根据您要自动执行的操作,要完成的代码会有所不同。