首页  > 教育解读  > 二进制算法代码怎么写

二进制算法代码怎么写

2025-05-01 20:34:37
心有灵犀
心有灵犀已认证

心有灵犀为您分享以下优质知识

关于二进制算法的代码实现,根据具体需求可分为整数与小数的转换、二进制运算等场景。以下是常见场景的代码示例及说明:

一、十进制转二进制(整数部分)

```python

def decimal_to_binary(n):

if n == 0:

return '0'

binary = ''

while n >

0:

binary = str(n % 2) + binary

n = n // 2

return binary

示例

print(decimal_to_binary(10)) 输出: 1010

```

二、十进制转二进制(含小数部分)

```python

def decimal_to_binary_with_fraction(n):

integer_part = int(n)

fractional_part = n - integer_part

binary_integer = bin(integer_part)[2:] 去掉前缀 '0b'

binary_fraction = ''

precision = 10 保留10位小数

for _ in range(precision):

fractional_part *= 2

bit = int(fractional_part)

binary_fraction += str(bit)

fractional_part -= bit

return binary_integer + '.' + binary_fraction

示例

print(decimal_to_binary_with_fraction(10.625)) 输出: 1010.101

```

三、二进制加法(无符号数)

```python

def binary_addition(a, b):

max_len = max(len(a), len(b))

a = a.zfill(max_len)

b = b.zfill(max_len)

carry = 0

result = ''

for i in range(max_len - 1, -1, -1):

bit_sum = carry

bit_sum += 1 if a[i] == '1' else 0

bit_sum += 1 if b[i] == '1' else 0

result = ('1' if bit_sum % 2 == 1 else '0') + result

carry = 0 if bit_sum < 2 else 1

if carry:

result = '1' + result

return result

示例

print(binary_addition('1010', '1011')) 输出: 10101

```

四、二进制减法(无符号数)

```python

def binary_subtraction(a, b):

max_len = max(len(a), len(b))

a = a.zfill(max_len)

b = b.zfill(max_len)

borrow = 0

result = ''

for i in range(max_len - 1, -1, -1):

bit_diff = int(a[i]) - int(b[i]) - borrow

if bit_diff < 0:

bit_diff += 2

borrow = 1

else:

borrow = 0

result = str(bit_diff) + result

去除前导零

while result and result == '0':

result = result[1:]

return result

示例

print(binary_subtraction('1010', '1001')) 输出: 0001

```

五、二进制乘法

```python

def binary_multiplication(a, b):

if a == '0' or b == '0':

return '0'

result = * (len(a) + len(b))

for i in range(len(a) - 1, -1, -1):

for j in range(len(b) - 1, -1, -1):

bit_product = (a[i] == '1') * (b[j] == '1')

result[i + j] += bit_product

result[i + j + 1] += result[i + j] // 2

result[i + j] %= 2

去除前导零

while len(result) >

1 and result[-1] == 0:

result.pop()

return ''.join(result)

示例

print(binary_multiplication('1010', '1011')) 输出: 1101110

```

六、二进制排序(快速排序)

```cpp

include

include

void swap(int* a, int* b) {

int temp = *a;

*a = *b;

*b = temp;

}

int partition(std::vector& arr, int low, int high) {

int pivot = arr[high];

int i = low - 1;

for