Python中如何实现真正的按位取反运算

目录
  • 运算代码
  • 实例说明
  • 补充:Python的按位取反运算符的简单解析
  • 总结

文章面向对象:对原理和编程不大有兴趣,只是需要用python实现一些运算功能的非计算机学生或从业者。大佬慎看防止血压拉高

运算代码

x=~x&0xFF

num是一个不大于255的十进制正数(负数的我不需要,所以我也没研究)

计算结果也是十进制的数

&右边的0xFF会决定计算结果的比特位。如果要得到正确的计算结果,两边的数据比特位应该相同

例如1000对应的十六进制是0xFC17,16比特位的,这时候求反就应该改成

x=~x&0xFFFF

实例说明

例如求58的反:

当x大于255时,想要得到正确的数字,就要修改一下代码

把0xFF换成0xFFFF或者更高,取决于x这个数占用的比特位。

(C语言基础会讲的知识,数据精度问题)

总之就是&两边的比特位要对应

**如果&右边保持为0xFF,但x大于了255,得到的结果则只有低位(如下图)
**

而实际上1000取反应该得到的十六进制表示是 ‘0xFC 17’

把完整的16比特位的FC17截断剩下17

(之所以这里用十六进制表示,是因为&右边对应的是16进制,这样看会更清楚。实际上取反运算是根据二进制表示运行的,那些也不重要,反正知道可以这样算就OK啦!)

补充:Python的按位取反运算符的简单解析

Python的按位取反运算符~的解释是:

对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1。

如a =61= 0b0011 1101,按位取反后的结果是:0b1100 0010=194,

可是Python中运算结果并非如此,

输出的~a的结果是:~a=62

这是怎么回事呢?

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

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

另外,求负整数的补码,将其对应正数二进制原码表示所有位取反(包括符号位,0变1,1变0)后加1

这里用括号来表示符号位,0表示正数,1表示负数。

a=61=(0)0b0011 1101,正数补码

~a=(1)0b1100 0010,负数补码,符号位为1表示这个代表一个负数,我们要知道其表示的数值。

对应负数原码到补码的转换过程:

(1)数值部分先减一:0b1100 0001

(2)数值部分取反:0b0011 1110,数值部分62

加上符号则~a =-62= (1)0b0011 1110,负数原码

总结

到此这篇关于Python中如何实现真正的按位取反运算的文章就介绍到这了,更多相关Python按位取反运算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python矩阵的基本运算及各种操作

    目录 一.Python 矩阵基本运算 二.python矩阵乘法 三.python矩阵转置 四.python求方阵的迹 五.python求逆矩阵/伴随矩阵 六.python方阵的行列式计算方法 七.python解多元一次方程 附:矩阵的高级操作 总结 一.Python 矩阵基本运算 引入 numpy 库 import numpy as np 1. python矩阵操作 1)使用 mat 函数创建一个 2X3矩阵 a = np.mat([[1, 2, 3], [4, 5, 6]]) 2)使用 sha

  • Python运算符之Inplace运算符的使用教程

    Python 在其定义中提供了执行就地操作的方法,即使用“ operator ”模块在单个语句中进行赋值和计算. 例如, x += y is equivalent to x = operator.iadd(x, y) 一些重要的就地操作: 1. iadd()  :- 该函数用于分配和添加当前值.该操作执行“ a+=b ”操作.在不可变容器(例如字符串.数字和元组)的情况下不执行分配. 2. iconcat()  :- 该函数用于在第二个末尾连接一个字符串 . # 演示 iadd() 和 icon

  • 思考分析Python运算中 a+=b 和 a=a+b是否相等

    目录 如题,先上代码 a+=b a=a+b a不等于b + 操作调用__add__方法 如题,先上代码 a+=b >>> b = </code><code>[</code><code>0, 1, 2</code><code>]</code> <code>>>> a = b >>> a += [3] >>> b [0, 1, 2, 3] &g

  • Python运算符优先级详细整理

    目录 前言 优先级概述 相同优先级 结合性 运算符优先级一览表 运算符优先级重点说明 结语 前言 虽然本文讲的是Python,但其实它也适用于所有的编程语言.因为这里面蕴含着编程之魂.所以本文标题没有显著的使用Python关键词.当然以前的文章用了Python关键词是因为当时我并没有想到这一点,很多内容也适用所有编程语言. 本文是运算符相关教程的最后一篇,将介绍运算符的最后一个汇总性的概念——运算符的优先级. 优先级概述 所谓优先级,是指优先计算的顺序.比如小学中我们学过的加减乘除基本四则运算,

  • python中dot函数运算过程总结

    目录 基本简介 1. 向量内积 2. 矩阵乘法运算 2.1如下单个数的dot函数运算所示: 2.2如下一维数组的dot函数运算所示: 2.3如下二维数组的dot函数运算所示: 2.4如下二维数组与三维数组的dot函数运算: 2.5如下多维数组的dot函数运算所示: 总结 本文结合其他博主的一些介绍总结了dot函数运算过程 基本简介 dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积.多维矩阵乘法和矩阵与向量的乘法. 1. 向量内积 向量其实是一维的矩阵,两个向量进行

  • Python图像运算之图像锐化和边缘检测

    目录 一.图像锐化 1.一阶微分算子 2.二阶微分算子 二.Roberts算子 三.Prewitt算子 四.总结 一.图像锐化 由于收集图像数据的器件或传输图像的通道存在一些质量缺陷,或者受其他外界因素的影响,使得图像存在模糊和有噪声的情况,从而影响到图像识别工作的开展.一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息主要集中在其高频部分.这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现.为了减少这类不利效果的影响,就需要利用图像锐化技术,使

  • Python中的取整、取余运算方法

    目录 1.取整运算 2.取余运算 Python 几种取整的方法 1.向下取整 2.四舍五入 3.向上取整 4.分别取整数部分和小数部分 1.取整运算 在Python中取整运算的运算符为//,且取整运算的取整为向下取整,不进行四舍五入例:9//4=2,即9对4取整等于2-9//-4=2,因为-9÷-4=2.25,取整为2那么问题来了,9//-4等于多少呢?9//-4=-3,因为9÷-4应该等于-2.25,那么对-2.25向下取整,应该为-3,而不是-2,所以9//-4=-3那么-9//4呢?-9÷

  • python中的各种运算符介绍

    目录 一.比较运算符 二.​赋值运算符​ ​三.位运算符​ 四.​逻辑运算符​ 五.​成员运算符​ 以Python 3.x版本为主 一.比较运算符 比较运算符主要是True和Fals两个值 编号 比较运算符 说明 1 == 等于 2 != <>(Python3 已不再使用) 不等于 3 > 大于 4 < 小于 5 >= 大于等于 6 <= 小于等于 ​代码如下:​ a=51 b=len('CTO') # 等于 print('a和b等于比较值:'+str(a==b)) #

  • python中对%、~含义的解释

    目录 %有哪几种含义? ~含义是什么? 按位取反运算符 %有哪几种含义? 查找手册 翻看<The Python Libary Reference>python库指南中附录index部分(P1899): % (percent):datetime format, 198, 594, 596environment variables expansion (Windows), 377, 1798interpolation in configuration files, 493operator, 31p

  • Python中的变量、运算符与流程控制

    目录 一.执行Python程序的两种方式 1.交互式 2.命令行式 二.变量 1.变量的组成 2.变量名的定义规范 3.定义变量的两种方式 4.常量 三.Python变量内存管理 1.引用计数 2.垃圾回收机制 3.小整数池 4.内存地址与数据类型 5.实例: 四.花式赋值 1. 链式赋值 2. 交叉赋值 3.多个变量赋值 五.与用户交互 六.格式化输出 1. 占位符(旧式字符串格式化,逐步淘汰) 2. format格式化 1.格式:<模板字符串>.format(<逗号分隔的参数>

  • 详解Python中位运算的简单实现

    目录 简介 应用场景 案例源码 简介 程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作. 应用场景 在常规操作和位运算的操作中使用位运算,可以提升性能.但是会造成代码难以理解,建议合理利用. 1.统计奇数 2.统计偶数 3.统计不相同数等 4.求相反数 位运算分有6种: 1.按位与:两个位都为1时,结果才为1(统计奇数)即全1为1. 2.按位或:两个位都为0时,结果才为0(统计偶数)即全0为0. 3.按位异或

  • Python中True(真)和False(假)判断详解

    目录 前言 1.True和False的逻辑取反 2.if条件语句中的True和False 3.pandas.DataFrame.loc 中的否定 总结 前言 Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反.if条件式和pandas.DataFrame.loc切片中的条件式. 1.True和False的逻辑取反 在对True和False进行逻辑取反时,不使用~,而要使用not. 因为在Python中,not才是逻辑取反,而~是按位取反.

  • 一文带你了解Python中的双下方法

    目录 前言 1. init方法 2. 运算符的双下方法 2.1 比较运算符 2.2 算术运算符 2.3 反向算术运算符 2.4 增量赋值运算符 2.4 位运算符 3.字符串表示 4.数值转换 5.集合相关的双下方法 6.迭代相关的双下方法 7.类相关的双下方法 7.1 实例的创建和销毁 7.2 属性管理 7.3 属性描述符 8.总结 前言 大家在写 Python 代码的时候有没有这样的疑问. 为什么数学中的+号,在字符串运算中却变成拼接功能,如'ab' + 'cd'结果为abcd:而*号变成了重

  • 简单了解Python中的几种函数

    几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >>> g = lambda x,y:x+y #x+y,并返回结果 >>> g(3,4) 7 >>> (lambda x:x**2)(4) #返回4的平方 16 lambda函数的使用方法: 在lambda后面直接跟变量 变量后面是冒号 冒号后面是表达式,表达式计算

  • 基于python中的TCP及UDP(详解)

    python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = socket() # 创建服务器套接字 ss.bind() # 套接字与地址绑定 ss.listen() # 监听连接 inf_loop: # 服务器无限循环 cs = ss.accept() # 接受客户端连接 comm_loop: # 通信循环 cs.recv()/cs.send() # 对话(接收/发

  • python中文件变化监控示例(watchdog)

    在python中文件监控主要有两个库,一个是pyinotify ( https://github.com/seb-m/pyinotify/wiki),一个是watchdog(http://pythonhosted.org/watchdog/).pyinotify依赖于Linux平台的inotify,后者则对不同平台的的事件都进行了封装.因为我主要用于Windows平台,所以下面着重介绍watchdog(推荐大家阅读一下watchdog实现源码,有利于深刻的理解其中的原理). watchdog在不

随机推荐