计算机中的符号数有三种表示方法,即原码反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。

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

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

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

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

C++ 代码:

 1 UINT8 check_sum(UINT8 *buf, UINT8 bufLen)
2 {
3 UINT8 ucCrc = 0;
4 UINT8 i;
5 for (i=0; i<bufLen; i++)
6 {
7 ucCrc += buf[i];
8 }
9 ucCrc = ~ucCrc;
10 ucCrc += 1;
11 return ucCrc;
12 }

python代码:

1 def check_sum(data):
2 usCRC = 0
3 for byte in data:
4 usCrc += ord(byte)
5 #usCrc = ~usCrc #此处不能跟C++一样使用按位取反运算
6 usCrc ^= 0xff
7 usCrc += 1
8 return '%02X'%usCrc

最新文章

  1. centos7 安装lamp
  2. C#正则表达式教程和示例
  3. 我的opencv之旅:ios人脸识别
  4. [Effective JavaScript 笔记]第32条:始终不要修改__proto__属性
  5. @Register指令
  6. 1_1准备工作[wp8特色开发与编程技巧]
  7. 3月3日(3) Binary Tree Preorder Traversal
  8. ASP.NET-FineUI开发实践-11
  9. jrae源码解析(二)
  10. HTML标签的命名/CSS标准化命名大全
  11. react native 1跳2 2跳3 3跳4 4pop回2
  12. linux学习笔记2 - linux常用命令
  13. MongoDB一键安装(参数全部定制)
  14. RESTframework简介
  15. [codechef July Challenge 2017] Chef and Sign Sequences
  16. EOS开发经验总结——不定期持续更新中
  17. CF 1114 E. Arithmetic Progression
  18. 解决MySQL Slave 触发 oom-killer
  19. linux的chmod,chown命令详解
  20. STS项目html文件中文乱码解决

热门文章

  1. JavaScript 函数 (一 JavaScript 函数的声明与使用)
  2. 一文看懂:ChIP实验和qPCR定量分析怎么做|易基因技术
  3. Redis的数据类型操作(二)
  4. 解释 Java 堆空间及 GC?
  5. 文件缓存tmpfs + 数据缓存SSDB(一)
  6. vue 初识(基础语法与数据驱动模型)
  7. windows 添加路由表
  8. C++ | 虚函数表内存布局
  9. html 元素 强制不换行
  10. java重载时自动转换咋回事?举例说明