C++位运算符

C++源自C,在提供高级语言便利的同时,也继承了C在硬件编程方面的功能。因此适用于编写设备驱动和嵌入式大代码。

C++/C 提供位逻辑运算符移位运算符。二者只能用于整形和字符型。位运算符是对每位进行操作而不影响左右两位,这有别于常规运算符(&&  ||  !)是将整个数进行操作的。
-------------------------------------------------------------------------------------------------------------------------

位运算应用口诀
清零取反要用与,某位置一可用或
若要取反和交换,轻轻松松用异或
移位运算
要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。
    2 " < <" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。
    3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。
    4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。

-------------------------------------------------------------------------------------------------------------------------

一.     位逻辑运算符

1.     ~ 按位取反

将1变为0,将0变为1

EG:

~(10011010)

(01100101)

 

注:

VC++编译器,计算~10,得出的结果是-11。为什么不是5呢  

  10的二进制表示为1010,按位取反应该为0101,也就是十进制的5,为什么会得出-11?  

 

  VC是32位编译器,所以  

   10  =  00000000  00000000  00000000    00001010 

  ~10  =  11111111  11111111    11111111     11110101  =    -11

  可以通过掩码(位与) 与15位与

    15  =  00000000  00000000  00000000    00001111

  ~10  =  00000000  00000000  00000000    00000101    =    -11

 

2.     & 按位取与

只有两个操作数都是1结果才是1,否则为0

10  =  00000000  00000000  00000000    00001010 

12  =  00000000  00000000  00000000    00001100

&

8   =  00000000  00000000  00000000    00001000

 

3.     |  按位取或

两个操作数任意一位为1结果就是1

10  =  00000000  00000000  00000000    00001010 

12  =  00000000  00000000  00000000    00001100

|

14  =  00000000  00000000  00000000    00001110

        

4.     ^ 按位异或

 两个操作数不同为1,相同为0

10  =  00000000  00000000  00000000    00001010 

12  =  00000000  00000000  00000000    00001100

^

14  =  00000000  00000000  00000000    00000110

         

5.     用法:掩码

掩码是通过&(位与)将某些位设置为开(1),将某些位设置为关(0)。将掩码0看做不透明,将1看着透明。

EG:

如只显示第二、三位

107  =  0110 1011

6              =  0000 0110

&

2     =  0000 0010

         

6.     用法:打开位

打开位是通过 |(位或)打开一个值的特定位,同时保持其他位的不变。这是因为和0位或都为0,和1位或都为1。

EG:

如只打开第二、三位

107  =  0110 1011

6     =  0000 0110

|

111  =  0110 1111

 

7.     用法:关闭位

关闭某些位

EG:

如关闭第二、三位

107  =  0110 1011

6     =  0000 0110

& ~

105  =  0110 1001

 

8.     用法:转置位

如果一位为1则转置为0,如果一位为1则转置为0

pan>

EG:

如转置第二、三位

107  =  0110 1011

6     =  0000 0110

^

105  =  0110 1101

        

二.     移位运算符

<< 左移

左移运算符是把操作数的值的每一位向左移动,移动的位数有右边的操作数决定,右侧空出的位数用0填充

EG:

如转置第二、三位

107  =  0110 1011 <<2

<< 

172  =  1010 1100

        

        在计算机中由于是32位的

107  =  0000 0000    0000 0000    0000 0000    0110 1011 <<2

<< 

428  =  0000 0000    0000 0000    0000 0001    1010 1100

  

>> 右移

右移运算符是把操作数的值的每一位向右移动,移动的位数有右边的操作数决定,左边丢弃的位数用0填充

EG:

如转置第二、三位

107  =  0110 1011 >>2

>> 

26  =  0001 1010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值