c语言位运算

C语言中的位运算符包括以下几种:

  1. 按位与(&) :对应位都为1时结果为1,否则为0。例如:
    int a = 6// 二进制为 0000 0110
    int b = 3// 二进制为 0000 0011
    int result = a & b; // 结果为 0000 0010 (十进制2)
    ```

2. **按位或(|)** :两个位中有一个为1时结果为1,否则为0<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。例如<b class="card40_249__sup_a7f6" data-sup="sup">2</b>:

```c
    int a = 11// 二进制为 1011
    int b = 12// 二进制为 1100
    int result = a | b; // 结果为 1111 (十进制15)
    ```

3. **按位异或(^)** :两个位不同时结果为1,相同时为0<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。例如<b class="card40_249__sup_a7f6" data-sup="sup">2</b>:

```c
    int a = 11// 二进制为 1011
    int b = 12// 二进制为 1100
    int result = a ^ b; // 结果为 0001 (十进制1)
    ```

4. **按位取反(~)** :将0变为1,将1变为0<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。例如<b class="card40_249__sup_a7f6" data-sup="sup">2</b>:

```c
    int a = 5// 二进制为 0101
    int result = ~a; // 结果为 1010 (十进制-6)
    ```

5. **右移(>)** :将二进制位向右移动指定的位数,左边空出的位用01填充,正数补0,负数补1。例如<b class="card40_249__sup_a7f6" data-sup="sup">2</b>:

```c
    int a = 8// 二进制为 1000
    int result = a >> 1// 结果为 0100 (十进制4)
    ```

位运算符的优点包括高效、节省空间和应用广泛。它们直接作用于二进制数据,执行速度非常快,并且可以使用单个位来代表数据的状态。位运算符在网络编程、加密算法、数据压缩等方面有广泛应用<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。

### 实战演练<b class="card40_249__sup_a7f6" data-sup="sup">4</b>

1. **判断奇偶数** <b class="card40_249__sup_a7f6" data-sup="sup">5</b>:

```c
    int num = 9if (num & 1) {
        printf("%d是奇数\n", num);
    } else {
        printf("%d是偶数\n", num);
    }
    ```

2. **数据加密** :

```c
    int a = 10int b = 20;
    a ^= b; // a现在是a和b的异或结果
    b ^= a; // b现在变成了a原来的值
    a ^= b; // a现在变成了b原来的值
    printf("a = %d, b = %d\n", a, b);
    ```

3. **快速清零和保留指定位** <b class="card40_249__sup_a7f6" data-sup="sup">5</b>:

```c
    int a = 15;
    a &= 7// a的二进制为 0111, 结果为 0111 (十进制7)
    ```

通过这些示例,你可以看到位运算符在C语言中的强大功能和广泛应用。掌握位运算可以显著提高代码的执行效率和简洁性。
Top