当前位置:首页 > 行业动态 > 正文

c语言 位运算符怎么用

位运算符是C语言中一种特殊的运算符,主要用于对二进制位进行操作,位运算符的优先级较高,高于算术运算符和关系运算符,C语言中的位运算符有以下几种:

1、按位与(&):对应位都为1时,结果为1,否则为0。

2、按位或(|):对应位有一个为1时,结果为1,否则为0。

3、按位异或(^):对应位不同时,结果为1,否则为0。

4、按位取反(~):将每一位取反,即0变为1,1变为0。

5、左移(<<):将二进制数向左移动指定的位数,右边用0填充。

6、右移(>>):将二进制数向右移动指定的位数,左边用符号位填充。

下面通过一些实例来详细介绍如何使用这些位运算符。

实例1:按位与运算

#include <stdio.h>
int main() {
    int a = 6; // 二进制表示为:0110
    int b = 3; // 二进制表示为:0011
    int c = a & b; // 按位与运算,结果为:0010,即2
    printf("a & b = %d
", c);
    return 0;
} 

实例2:按位或运算

#include <stdio.h>
int main() {
    int a = 6; // 二进制表示为:0110
    int b = 3; // 二进制表示为:0011
    int c = a | b; // 按位或运算,结果为:0111,即7
    printf("a | b = %d
", c);
    return 0;
} 

实例3:按位异或运算

#include <stdio.h>
int main() {
    int a = 6; // 二进制表示为:0110
    int b = 3; // 二进制表示为:0011
    int c = a ^ b; // 按位异或运算,结果为:0101,即5
    printf("a ^ b = %d
", c);
    return 0;
} 

实例4:按位取反运算

#include <stdio.h>
int main() {
    int a = 6; // 二进制表示为:0110
    int b = ~a; // 按位取反运算,结果为:1001,即7(补码表示)
    printf("~a = %d
", b);
    return 0;
} 

实例5:左移运算

#include <stdio.h>
int main() {
    int a = 6; // 二进制表示为:0110
    int b = a << 2; // 左移2位,结果为:1100,即12(补码表示)
    printf("a << 2 = %d
", b);
    return 0;
} 

实例6:右移运算(无符号整数)

#include <stdio.h>
#include <limits.h> // 引入头文件以使用UINT_MAX常量
int main() {
    unsigned int a = UINT_MAX; // 无符号整数最大值,二进制表示为:1111...1(共32个1)
    unsigned int b = a >> 2; // 右移2位,结果为:0011...1(共322=30个1),即255(十进制表示)+256(溢出)=511(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示)+256(溢出)=510(补码表示)512=2(补码表示)+256=254(十进制表示),所以最终结果为负数,注意:这里的结果已经超出了无符号整数的范围,所以不能直接输出,如果需要输出无符号整数范围之外的结果,可以使用有符号整数类型或者自定义数据结构来存储结果,由于右移运算涉及到符号位扩展的问题,所以在不同平台上运行上述代码可能会得到不同的结果,在编写涉及位运算的程序时,需要注意平台的差异。 
0