C语言之位运算

C语言中提供六种位运算

说明:
(1)"~"为单目运算符,其余均为双目运算符,优先级高低顺序:
     按位求反~      移位        按位与&         按位异或^         按位或|

(2)运算量只能是整型或字符型数据,不能是实型(浮点型)

(3)参与运算时,操作数都必须转换成二进制形式,然后再执行按位运算

1.按位与运算(&)

格式:x&y
规则:对应位均为1时才为1,否则为0(全1为1)           

              0&0=0,0&1=0,1&0=0,1&1=1

#include <stdio.h>
int main()
{
    printf("%d, %d\n", 9 & 5, -9 & 5);
    return 0;
}

运行结果:1,5


2.按位或运算(|)

格式:x|y
规则:对应位均为0时才为0,否则为1(一1为1)           

              0|0=0,0|1=1,1|0=1,1|1=1

#include <stdio.h>
int main()
{
    printf("%d, %d\n", 9 | 5, -9 | 5);
    return 0;
}
运行结果:13,-9


3.按位异或(^)

格式:x^y
规则:对应位相同时为0,不同时为1           
              0^0=0,0^1=1,1^0=1,1^1=0

#include <stdio.h>
int main()
{
    printf("%d, %d\n", 9 ^ 5, -9 ^ 5);
    return 0;
}
运行结果:12,-14


4.按位取反(~)

格式:~x
规则:各位翻转,即原来为1的位变成0,原来为0的位变成1        
              ~0=1,~1=0

#include <stdio.h>
int main()
{
    printf("%d, %d\n", ~9, ~- 9);
    return 0;
}
运行结果:-10,8


5.按位左移(<<)

格式:x<<位数
规则:使操作数的各位左移,低位补0,高位溢出

补充:如果左移出的位不是1,则左移操作相当于乘法操作,左移一位相当于原数乘以2,左移n位,则相当于原数乘以2的n次幂

#include <stdio.h>
int main()
{
    printf("%d, %d\n", 9 << 3, (-9) << 3);
    return 0;
}
运行结果:72,-72


6.按位右移(>>)

格式:x>>位数
规则:使操作数的各位右移,移出的低位舍弃,高位遵循如下规则:
  1)对无符号数和有符号中的正数,补0;

  2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”(TC系统)。

        逻辑右移:左边用0填充

        算术右移:左边用原该值的符号位填充,右边丢弃

补充:右移操作相当于除法操作,右移一位相当于原数除以2,右移n位,则相当于原数除以2的n次幂

#include <stdio.h>
int main()
{
    printf("%d, %d\n", 9 >> 3, (-9) >> 3);
    return 0;
}
运行结果:1,-2












猜你喜欢

转载自blog.csdn.net/qq_40355351/article/details/79765500