C语言位逻辑运算符

位运算是指对二进制数按位进行运算,其操作对象是一个二进制位集合,每个二进制位只能存放0或1。位逻辑运算符是将数据中每个二进制位上的 “0”或 “1”看成逻辑值,逐位进行逻辑运算的位运算符。

位逻辑运算符

位逻辑运算符包括按位非、按位与、按位或和按位异或。具体如表所示。

C语言位逻辑运算符

C语言位逻辑运算符

位逻辑运算符总结如下:

  • 按位非(~)运算符是单目运算符,它的运算对象只有一个,它的结合性是自右向左。其功能是对参与运算的数的各二进位按位求反。例如:~0=1,~1=0。

  • 按位与运算符(&)是双目运算符,它的结合性是自左向右。其功能是参与运算的两数的二进制各对应位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。
    例如:二进制代码00001001和00000101相与,图示如下:

    C语言位逻辑运算符
    按位与运算通常用来对某些位清0。根据对应位同为1时才为1的原则,为了使某数的指定位清零,可将数按位与一特定数相与,该数中和为1的位,特定数中对应的位为0;该数中的为0的位,特定数中对应的位为0或1均可。

    按位与运算还可以用来取一数中的某些位,对要取的那些位,特定数中相应的位设为1即可。

  • 按位或运算符(|)是双目运算符,它的结合性是自左向右。其功能是参与运算的两数的二进制各对应位相或。只要对应的两个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如:二进制代码00001001和00000101相或,图示如下:

    C语言位逻辑运算符

    按位或运算可将数据的某些位置1,将与该数按位或的特定数的相应位置1即可。

  • 按位异或运算符(^)是双目运算符,它的结合性是自左向右。其功能是参与运算的两数的二进制各对应位相异或,当两对应的二进位上的数不相同时,结果为1。例如:二进制代码00001001和00000101相异或,图示如下:

    C语言位逻辑运算符

    按位异或运算是当两个数的对应位不同时,结果为1,所以按位异或运算可以把数的某些位翻转,即0变1,1变0,保留某些位。

示例:

#include <stdio.h>
void main()
{
    int i, j, c1, c2, c3, c4;
    i = 10;
    j = 12;
    c1 = ~i;
    c2 = i & j;
    c3 = i | j;
    c4 = i ^ j;
    printf("~i =%d\n", c1);
    printf("i&j =%d\n", c2);
    printf("i|j =%d\n", c3);
    printf("i^j =%d\n", c4);
}

运行结果如下:

C语言位逻辑运算符

位逻辑运算符的优先级

在位逻辑运算符中优先级如图所示:

C语言位逻辑运算符

与前面已经学习过的其他运算符相比,位逻辑运算符的优先级如图所示:

C语言位逻辑运算符

赞(0)

评论 抢沙发

评论前必须登录!