龙空技术网

在Python中执行按位取反避坑

hello21 17

前言:

今天你们对“c语言按位取反运算符”大概比较珍视,大家都需要学习一些“c语言按位取反运算符”的相关知识。那么小编同时在网摘上汇集了一些对于“c语言按位取反运算符””的相关知识,希望朋友们能喜欢,朋友们一起来了解一下吧!

在Python中,按位取反的操作符是"~",但是谨记,按位取反操作的对象一定要是无符号整数,否则会带来错误结果。

在不引入任何库的前提下,Python中并没有专门的方法来定义无符号整数,例如类似C语言里面定义unsigned int。在默认情况下,Python提供的整型数据类型都是有符号整数,例如下图所示,变量x和y的数据类型都是int,它们可以是正数,也可以是负数。

直接对有符号整数进行按位取反操作,然后查看二进制显示结果,在操作对象是负数的时候则会看到奇怪的表示,以下面的例子来说明。首先x=10,它的二进制表示是'0b1010',这没有问题。但是y=-23,它的二进制表示是'-0b1011',单看23这个数,用二进制表示是'10111';考虑到-23是负数,用8位的补码(最高位是符号位)表示应该是'1110 1001'。无论哪种表示方法,都与'-0b1011'无直接的对应关系。

通过使用numpy库定义无符号整数,然后进行按位取反操作,则可以避免这个问题。下面这个例子,在计算一个负整数的补码的过程中,应用了按位取反操作。还是以x=-23为例,uint8的数值范围足够本例使用。对于数值位的数值23,二进制表示是'0001 0111',这是原码;按位取反,则是得到'1110 1000',这是反码;再执行一个加1的操作,得到'1110 1001'。

标签: #c语言按位取反运算符