如何根据这个来做出位运算的加减乘除
时间: 2023-08-06 17:13:13 浏览: 79
用位运算不用算术运算实现整数的加减乘除运算
位运算是对二进制数进行的运算,因此我们可以将加减乘除的操作转化为对二进制数进行位运算。
1. 加法:
对于两个二进制数 a 和 b,我们可以使用异或运算(^)计算它们的无进位和 s = a ^ b,使用与运算(&)计算它们的进位 c = a & b,然后将进位左移一位再与无进位和相加,即可得到它们的和。
```python
def add(a, b):
while b != 0:
# 计算无进位和
s = a ^ b
# 计算进位
c = (a & b) << 1
a, b = s, c
return a
```
2. 减法:
对于两个二进制数 a 和 b,我们可以使用补码表示法,将 b 取反加一得到它的相反数 -b,然后将 a 和 -b 相加即可得到它们的差。
```python
def sub(a, b):
# 将 b 取反加一得到它的相反数
b = add(~b, 1)
return add(a, b)
```
3. 乘法:
对于两个二进制数 a 和 b,我们可以使用位移和加法来计算它们的乘积。具体地,我们可以将 b 拆分成若干个二进制位,对于每一位 i,如果 b 的第 i 位是 1,则将 a 左移 i 位后累加到结果中。
```python
def mul(a, b):
res = 0
while b != 0:
if b & 1 == 1:
res = add(res, a)
a = a << 1
b = b >> 1
return res
```
4. 除法:
对于两个二进制数 a 和 b,我们可以使用位移、减法和加法来计算它们的商和余数。具体地,我们可以从高位到低位依次计算商的每一位,对于每一位 i,我们可以将 a 左移 i 位,判断它是否大于等于 b,如果是,则将商的第 i 位设为 1,将 b 左移 i 位后从 a 中减去,否则将商的第 i 位设为 0。
```python
def div(a, b):
res, remainder = 0, 0
for i in range(31, -1, -1): # 从高位到低位依次计算商的每一位
if remainder >= b:
res |= (1 << i) # 将商的第 i 位设为 1
remainder = sub(remainder, b)
remainder = remainder << 1 # 将余数左移一位
if a >> i & 1 == 1:
remainder |= 1 # 将 a 的第 i 位加入余数中
return res
```
需要注意的是,以上代码中的加、减、乘、除都是针对整数进行的位运算,如果需要针对浮点数进行计算,则需要使用其他算法。
阅读全文