2020-2-10 17:37
位操作是程序设计钟对位模式安危或二进制数的一元和二元操作
关于单目,双目,三目运算符的区别
单目运算符是指运算所需变量为一个的运算符,即在运算中只有一个操作数,又叫一元运算符
双目运算符就是只有两个操作数
三目运算符有三个操作数,目前只有一个条件运算符
?
,比如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。
参与运算数仍以补码出现。
9^5 00001001 ^ 00000101 =00001100
求反运算 ~
求反运算符~
为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。
~9 ~(1001) 0110
左移运算 <<
左移运算符<<
是双目运算符。左移n位就是乘以2的n次方。 其功能把<<
左边的运算数的各二进位全部左移若干位,由<<
右边的数指定移动的位数,高位丢弃,低位补0
右移运算 >>
右移运算符>>
是双目运算符。右移n位就是除以2的n次方
其功能是把>>
左边的运算数的各二进位全部右移若干位,>>
右边的数指定移动的位数。
x>>1;//相当于x/=2 x<<1;//相当于x*=2 x>>2;//x/=4 x<<2;//x*=4 x>>3;//x/=8 x<<3;//x*=8