python~进制,位运算(2)

常识:

1G = 1024M

1M = 1024K

1K = 1024B

1B = 8bit

一个汉字占16bit,一个英文字母占8bit,一个数字占8bit,所以:

正数: 0 000 0001 ~ 0 111 1111 = 1~127

负数: 1 000  0001 ~ 1 111 1111 = -127~-1

+0: 0000 0000 = 0

-0: 1000 0000 = -128

 

### Python 中的二进制位运算操作及用法 #### 1. 按位与 (`&`) 按位与操作会逐位比较两个整数的二进制表示形式。只有当两个对应的二进制位均为 `1` 时,结果才为 `1`,否则为 `0`[^2]。 ```python a = 6 # 二进制: 0110 b = 3 # 二进制: 0011 result = a & b # 结果: 0010 -> 十进制 2 print(result) # 输出: 2 ``` --- #### 2. 按位或 (`|`) 按位或操作同样逐位比较两个整数的二进制表示形式。只要其中一个对应位置上的二进制位为 `1`,则结果就为 `1`,否则为 `0`。 ```python a = 6 # 二进制: 0110 b = 3 # 二进制: 0011 result = a | b # 结果: 0111 -> 十进制 7 print(result) # 输出: 7 ``` --- #### 3. 按位异或 (`^`) 按位异或操作会对两个整数的二进制表示形式中的每一位进行对比。如果两位不同,则结果为 `1`;如果相同,则结果为 `0`[^4]。 ```python a = 6 # 二进制: 0110 b = 3 # 二进制: 0011 result = a ^ b # 结果: 0101 -> 十进制 5 print(result) # 输出: 5 ``` --- #### 4. 按位取反 (`~`) 按位取反操作会将每一个二进制位翻转:`1` 转变为 `0`,而 `0` 则转变为 `1`。需要注意的是,在 Python 中,由于负数采用补码存储方式,因此结果可能是一个负数。 ```python a = 6 # 二进制: 0110 result = ~a # 补码转换后的十进制值为 -7 print(result) # 输出: -7 ``` --- #### 5. 左移 (`<<`) 左移操作会使指定数量的比特位向左移动,左侧溢出的部分会被舍弃,右侧空缺的位置填充零[^3]。 ```python a = 6 # 二进制: 0110 result = a << 1 # 向左移动一位,结果为 1100 -> 十进制 12 print(result) # 输出: 12 ``` --- #### 6. 右移 (`>>`) 右移操作会使指定数量的比特位向右移动,右侧被移除的比特位将会丢失,对于无符号数据类型来说,左侧填入零;而对于有符号的数据类型而言,取决于具体实现(通常情况下也是填入零)[^1]。 ```python a = 6 # 二进制: 0110 result = a >> 1 # 向右移动一位,结果为 0011 -> 十进制 3 print(result) # 输出: 3 ``` --- #### 综合应用实例 以下代码展示了如何利用上述各种位运算来解决实际问题——生成格雷码序列: ```python class Solution: def grayCode(self, n: int) -> list[int]: result = [] for i in range(2 ** n): # Gray Code 的计算公式:i ^ (i >> 1) result.append(i ^ (i >> 1)) return result ``` 此函数通过循环遍历从 `0` 至 `2^n-1` 的所有数字,并依据公式 `i ^ (i >> 1)` 来构建每一步的格雷编码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值