模2除法

关于一个二进制数1111000 除以1101,模2除法的商为1011,余数为111.这个结果不同于十进制除法。所以特记下。具体步骤如下:

  1. #第一步  
  2. 1111000  
  3. 1101  
  4. 0010000 ----余数,商为1,只要第一位非0商就是1  
  5. #第二步,每步移一位,当起始位为0时,除以0;为1时除以除数。  
  6. 010000  
  7. 0000  
  8. 010000  ----余数,商为0,只要第一位是0商就是0  
  9. #第三步  
  10. 10000  
  11. 1101  
  12. 01010  -----余数,商为1,这里的余数你猜出,其实就是对应位异或  
  13. #第四步  
  14. 1010  
  15. 1101  
  16. 0111   ------余数,商为1,如果位数比除数还小,不再继续运算  
  17. #最终余数为111,商为1011  

模2除法可以用在CRC冗余校验上。K,H均为2进制数,K向左移R,然后K除以H。模2除得到的余数在放到R位中。例如:K=1111,H=1101,R=3,移位之后得1111000,最后CRC=1111111。

### 2除法运算原理 2除法是一种基于异或(XOR)操作的特殊除法形式,在二进制数制下执行。此算法的核心在于逐位对比两个二进制序列并应用XOR逻辑门,即当两比特相同时输出0,反之则为1[^1]。 在实际计算场景中,2除法并不遵循常规算术法则中的借位或者进位机制,而是纯粹依赖于XOR的结果来决定商和余数值的变化。这一特性极大地简化了硬件电路设计以及软件编程实现上的复杂度[^2]。 ### 实现方法 为了更好地理解如何通过程序代码实现2除法,可以考虑下面给出的一个简单例子: 假设存在一个被数`1111000`(二进制表示),而数则是`1101`(同样采用二进制表达)。具体的操作流程如下所示: 1. 首先将两者左对齐放置; 2. 对最左侧的一组能够完全匹配长度的部分做XOR处理得到新的部分作为临时结果; 3. 如果当前阶段产生的中间产物大于等于数,则继续重复第2步直到无法再找到可匹配的位置为止; 4. 剩下的最后未参与任何一轮完整XOR操作的数据片段即为最终余数; 以下是Python语言版本的具体编码实例展示整个过程: ```python def mod2_division(dividend, divisor): # 初始化变量 pick = len(divisor) tmp = dividend[:pick] while pick < len(dividend): if tmp[0] == '1': xor_result = ''.join(['0' if i==j else '1' for i,j in zip(tmp,divisor)]) else: xor_result = ''.join(['0' if i=='0' and j=='0' else '1' for i,j in zip(tmp,''.zfill(len(divisor)))]) pick += 1 # 更新tmp用于下次迭代 remaining_bits = dividend[pick-1:pick] tmp = (xor_result + remaining_bits)[1:] if tmp[0] == '1': xor_result = ''.join(['0' if i==j else '1' for i,j in zip(tmp,divisor)]) else: xor_result = ''.join(['0' if i=='0' and j=='0' else '1' for i,j in zip(tmp,''.zfill(len(divisor)))]) check_word=xor_result return check_word print(mod2_division('1111000','1101')) ``` 该函数接收两个字符串参数分别代表被数与数,并返回经过2除法后的校验字(也即是所谓的CRC码)。这里需要注意的是输入应该全部由字符‘0’和‘1’组成以确保正确解析成有效的二进制串。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值