Python中整数的~(按位取反)运算

原理:1. 在计算机中整数用补码表示,非负数的补码是自身的二进制表示,负数的补码是相反数的二进制表示按位取反然后加1

2. python中整数的按位取反运算是先对整数的补码进行按位取反然后再回到整数

例子:~(-6)=5

步骤:(1)先求-6的补码表示:

-6 ——> 6(相反数) ——> 0000 0110(二进制表示) ——> 1111 1001(按位取反) ——> 1111 1010(加1)

(2)按位取反:

1111 1010 ——> 0000 0101(按位取反)

(3)回到整数:

0000 0101 ——> 5(回到整数)

 

推论:~5=-6

证明:把步骤逆回去就是。

推论:n为非负整数,则 ~n = n-1

 

 

### Python中按位运算的使用方法和原理 #### 按位运算的基本概念 按位运算符(bitwise operators)用于对整数类型的二进制位进行操作。Python中常见的按位运算包括按位与(`&`)、按位或(`|`)、按位异或(`^`)、按位取反(`~`)、左移(`<<`)和右移(`>>`)。这些操作直接作用于整数的二进制表示,因此在底层编程、性能优化和数据处理中具有重要作用。 #### 按位与(`&`) 按位与操作对两个操作数的每一位执行逻辑与运算。如果两个对应的二进制位都为1,则结果位为1;否则为0。该操作符也可用于非布尔类型的整数运算,与逻辑运算符`&&`不同,后者仅用于布尔表达式[^1]。 ```python a = 5 # 二进制: 0101 b = 3 # 二进制: 0011 result = a & b # 二进制: 0001 → 十进制: 1 ``` #### 按位或(`|`) 按位或操作对两个操作数的每一位执行逻辑或运算。只要两个对应的二进制位中有一个为1,则结果位为1;否则为0。 ```python a = 5 # 0101 b = 3 # 0011 result = a | b # 0111 → 十进制: 7 ``` #### 按位异或(`^`) 按位异或操作对两个操作数的每一位执行逻辑异或运算。如果两个对应的二进制位不同,则结果位为1;否则为0。 ```python a = 5 # 0101 b = 3 # 0011 result = a ^ b # 0110 → 十进制: 6 ``` #### 按位取反(`~`) 按位取反操作对操作数的每一位执行逻辑非运算。它将每一位取反,即将0变为1,1变为0。在Python中,整数采用补码形式表示,因此`~x`等价于`-x-1`。 ```python a = 5 # 0101 result = ~a # 结果为 -6 ``` 该运算符的优先级与其它一元运算符(如正负号)相同,低于算术运算符,但高于比较运算符[^2]。 #### 左移(`<<`)和右移(`>>`) 左移操作将操作数的二进制位向左移动指定的位数,右侧空出的位用0填充。右移操作则将二进制位向右移动,左侧空出的位用符号位填充(对于负数)或0填充(对于正数)。 ```python a = 5 # 0101 result_left = a << 1 # 1010 → 十进制: 10 result_right = a >> 1 # 0010 → 十进制: 2 ``` 这些位移操作常用于高效地实现乘法和除法运算,例如左移一位相当于乘以2。 #### 按位运算的应用场景 按位运算在多个领域具有广泛应用: - **位掩码(bitmask)**:用于设置、清除或检查特定的位标志。 - **权限控制**:例如在操作系统中使用位掩码表示文件访问权限。 - **加密与编码**:如在哈希算法、CRC校验和压缩算法中使用异或操作。 - **性能优化**:在嵌入式系统和底层编程中,位运算比算术运算更高效。 #### 与其他运算的优先级关系 按位运算的优先级介于算术运算和比较运算之间。例如,加法和减法的优先级高于按位与、或和异或;而按位运算的优先级又高于比较运算(如`==`、`<`等)。这种优先级安排确保了表达式的自然解析顺序,例如在位掩码操作中不需要额外的括号。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值