python 处理网络帧时,CRC算法中整数按位取反运算(~)得到负数的规避方法

Python63

正数的原码,反码,补码都是相同的;负数原码转化为反码:符号位不变,数值位按位取反;负数原码转化为补码:符号位不变,数值位按位取反,末尾加一。

但是python不像C语言有无符号类型,python中一个整数x按位取反后,最高位的符号位:正负交换了,即正数变为负数,负数变为正数了。要实现单纯的按位取反,而不带符号,

可以通过与一个全1的数据按位异或实现。比如,你有一个16位的数据a,需要对它做按位取反,那么这样就行了:a ^= 0xffff

比如将如下C++ 算法用python替代:

C++ 代码:

python代码:

Original: https://www.cnblogs.com/fdzwdt/p/11423235.html
Author: fdzwdt
Title: python 处理网络帧时,CRC算法中整数按位取反运算(~)得到负数的规避方法