位运算符
位操作是程序设计钟对位模式安危或二进制数的一元和二元操作
关于单目,双目,三目运算符的区别
单目运算符是指运算所需变量为一个的运算符,即在运算中只有一个操作数,又叫一元运算符
双目运算符就是只有两个操作数
三目运算符有三个操作数,目前只有一个条件运算符
?
,比如a?b;c
,当a的值为真时结果是b,否则结果是c。
因为在现代架构中,位运算的运算速度通常与加法运算相同,但是仍然快于乘法,所以可以用来进行优化2的n次幂
C语言中一共有六种位运算符
&
按位与|
按位或^
按位异或~
取反<<
左移>>
右移
按位与运算   &
按位与运算符&
是双目运算符,其功能是参与运算的两数各对应的二进位相与,只有对应两个二进位均为1时,结果位才为1,否则位0.参与运算的数以补码的方式出现
9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
c=a&b;
按位或运算   |
按位或运算符|
是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现
9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为11111111)
a|255;
按位异或运算   ^
按位异或运算符^
是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
参与运算数仍以补码出现。
1
2
3
4
5 9^5
00001001
^
00000101
>=00001100
求反运算   ~
求反运算符~
为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
1
2
3 >~9
>~(1001)
0110
左移运算   <<
左移运算符<<
是双目运算符。左移n位就是乘以2的n次方。 其功能把<<
左边的运算数的各二进位全部左移若干位,由<<
右边的数指定移动的位数,高位丢弃,低位补0
右移运算   >>
右移运算符>>
是双目运算符。右移n位就是除以2的n次方
其功能是把>>
左边的运算数的各二进位全部右移若干位,>>
右边的数指定移动的位数。
1
2
3
4
5
6 >x>>1;//相当于x/=2
>x<<1;//相当于x*=2
>x>>2;//x/=4
>x<<2;//x*=4
>x>>3;//x/=8
>x<<3;//x*=8