python程序设计 位运算操作

b507b8e9385f4b1b8d933317b745c6e3.png

1. `&`(按位与)


   - 运算:`-7 & 5`
   - 解释:按位与操作将两个数的每一位进行与操作,只有两个数的相应位都是1时,结果才是1,否则为0。
   - 计算步骤:
     - `-7` 的二进制表示(补码)是 `11111111 11111111 11111111 11111001`。
     - `5` 的二进制表示是 `00000000 00000000 00000000 00000101`。
     - 按位与的结果是 `00000000 00000000 00000000 00000001`,即 `1`。
   - 结果:`1`

 

 

2. `|`(按位或)


   - 运算:`-7 | 9`
   - 解释:按位或操作将两个数的每一位进行或操作,只要有一个数的相应位是1,结果就是1。
   - 计算步骤:
     - `-7` 的二进制表示(补码)是 `11111111 11111111 11111111 11111001`。
     - `9` 的二进制表示是 `00000000 00000000 00000000 00001001`。
     - 按位或的结果是 `11111111 11111111 11111111 11111001`,即 `-7`(补码表示)。
   - 结果:`-7`

 

 

3. `^`(按位异或)


   - 运算:`-7 ^ 9`
   - 解释:按位异或操作将两个数的每一位进行异或操作,只有一个数的相应位是1,结果就是1;如果两个数的相应位相同,结果为0。
   - 计算步骤:
     - `-7` 的二进制表示(补码)是 `11111111 11111111 11111111 11111001`。
     - `9` 的二进制表示是 `00000000 00000000 00000000 00001001`。
     - 按位异或的结果是 `11111111 11111111 11111111 11110000`,即 `-16`(补码表示)。
   - 结果:`-16`

 

 

4. `~`(按位取反)


   - 运算:`~9`
   - 解释:按位取反操作将数的每一位进行取反操作,0变成1,1变成0。
   - 计算步骤:
     - `9` 的二进制表示是 `00000000 00000000 00000000 00001001`。
     - 按位取反的结果是 `11111111 11111111 11111111 11110110`,即 `-10`(补码表示)。
   - 结果:`-10`

 

注:

这些二进制表示是标准的32位二进制表示法,用来表示带符号整数(包括正数和负数)。我们具体来看一下为什么这些二进制数这么长以及它们是如何表示的。

在计算机中,整数通常用固定长度的位数表示。在32位系统中,整数用32位二进制数表示,这样可以表示更多的数值范围。带符号整数使用补码(Two's Complement)表示,这样可以区分正数和负数。

1. 为什么用32位?
- 32位表示法可以表示的数值范围为:`-2^31` 到 `2^31 - 1`,即 `-2147483648` 到 `2147483647`。这种表示法可以处理更大的整数范围,适用于更多的计算需求。

 2. 如何表示负数?
负数在计算机中的表示采用补码(Two's Complement)形式。补码表示法有以下几个步骤:
1. 原码:直接将数值转换为二进制。
2. 反码:将原码的每一位取反(0变1,1变0)。
3. 补码:在反码的基础上加1。

示例计算:

1. -7的补码表示:
   - 7的二进制表示(原码):`00000000 00000000 00000000 00000111`
   - 取反(反码):`11111111 11111111 11111111 11111000`
   - 加1(补码):`11111111 11111111 11111111 11111001`,即 `-7`

2. 5的二进制表示:
   - 5的二进制表示(原码和补码):`00000000 00000000 00000000 00000101`

3. 9的二进制表示:
   - 9的二进制表示(原码和补码):`00000000 00000000 00000000 00001001`

4. 9的按位取反:
   - 9的二进制表示:`00000000 00000000 00000000 00001001`
   - 取反结果:`11111111 11111111 11111111 11110110`,即 `-10`

 

注:简化二进制表示


在解释过程中,我们用32位表示法来展示完整的位操作。实际上,在很多情况下,可以省略前面的零,只看最后几位即可。例如:
- `00000000 00000000 00000000 00000101` 简化为 `0101`
- `11111111 11111111 11111111 11111001` 简化为 `11111001`

重新解释结果
结合上面的解释,再来看之前的计算:

1.   `-7 & 5`
   - `-7`:`11111001`
   - `5`:`00000101`
   - 结果:`00000001`,即 `1`

2.   `-7 | 9`:
   - `-7`:`11111001`
   - `9`:`00001001`
   - 结果:`11111001`,即 `-7`

3.   `-7 ^ 9`:
   - `-7`:`11111001`
   - `9`:`00001001`
   - 结果:`11110000`,即 `-16`

4.   `~9`:
   - `9`:`00001001`
   - 取反结果:`11110110`,即 `-10`

 

未经允许 不得转载

如有错误 敬请指正

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值