正数的原码,反码,补码都是相同的;负数原码转化为反码:符号位不变,数值位按位取反;负数原码转化为补码:符号位不变,数值位按位取反,末尾加一。
但是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算法中整数按位取反运算(~)得到负数的规避方法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/596479/
转载文章受原作者版权保护。转载请注明原作者出处!