diff --git a/Python-Language/02. 位运算.md b/Python-Language/02. 位运算.md index b563e3a..3977167 100644 --- a/Python-Language/02. 位运算.md +++ b/Python-Language/02. 位运算.md @@ -4,41 +4,41 @@ 二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。 -原码:就是其二进制表示(注意,有一位符号位)。 +**原码**:就是其二进制表示(注意,有一位符号位)。 -```c +```python 00 00 00 11 -> 3 10 00 00 11 -> -3 ``` -反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。 +**反码**:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。 -```c +```python 00 00 00 11 -> 3 11 11 11 00 -> -3 ``` -补码:正数的补码就是原码,负数的补码是反码+1。 +**补码**:正数的补码就是原码,负数的补码是反码+1。 -```c +```python 00 00 00 11 -> 3 11 11 11 01 -> -3 ``` -符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。 +**符号位**:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。 ## 2. 按位非操作 ~ -```c +```python ~ 1 = 0 ~ 0 = 1 ``` `~` 把`num`的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 `~` 运算中同样会取反。 -```c +```python 00 00 01 01 -> 5 ~ --- @@ -53,7 +53,7 @@ ## 3. 按位与操作 & -```c +```python 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 @@ -61,7 +61,7 @@ ``` 只有两个对应位都为 1 时才为 1 -```c +```python 00 00 01 01 -> 5 & 00 00 01 10 -> 6 @@ -71,7 +71,7 @@ ## 4. 按位或操作 | -```c +```python 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 @@ -79,7 +79,7 @@ ``` 只要两个对应位中有一个 1 时就为 1 -```c +```python 00 00 01 01 -> 5 | 00 00 01 10 -> 6 @@ -89,7 +89,7 @@ ## 5. 按位异或操作 ^ -```c +```python 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 @@ -98,7 +98,7 @@ 只有两个对应位不同时才为 1 -```c +```python 00 00 01 01 -> 5 ^ 00 00 01 10 -> 6 @@ -107,7 +107,7 @@ ``` 异或操作的性质:满足交换律和结合律 -```c +```python A: 00 00 11 00 B: 00 00 01 11 @@ -124,7 +124,8 @@ A^B^A: = A^A^B = B = 00 00 01 11 ## 6. 按位左移操作 << `num << i` 将`num`的二进制表示向左移动`i`位所得的值。 -```c + +```python 00 00 10 11 -> 11 11 << 3 --- @@ -134,7 +135,7 @@ A^B^A: = A^A^B = B = 00 00 01 11 ## 7. 按位右移操作 >> `num >> i` 将`num`的二进制表示向右移动`i`位所得的值。 -```c +```python 00 00 10 11 -> 11 11 >> 2 --- @@ -197,10 +198,10 @@ a 并 b -> a | b a 差 b -> a & (~b) ``` ---- -整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。 -【例子】C#语言输出负数 +注意:整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。 + +【例子】C#语言输出负数。 ```c class Program @@ -218,7 +219,7 @@ class Program } ``` -但我们看一下 Python 的`bin()` 输出。 +【例子】 Python 的`bin()` 输出。 ```python print(bin(3)) # 0b11