C语言操作符----位操作符

前提: 位操作符的操作数必须是整数

1.分类:

        按(二进制)位与             &           

        按(二进制)位或              |

        按(二进制)位异或         ^ 

     

2.按(二进制)位与             &     

(1)列出 & 两边的操作数的二进制序列 

(2)按对应二进制位    进行按位与

(3) 按位与的规则是: 有假则假,全真为真

                                     (也就是 有0则0,全1为1)

3. 按(二进制)位或              |

(1)列出 & 两边的操作数的二进制序列 

(2)按对应二进制位    进行按位或

(3) 按位或的规则是: 全假则假,有真则真

                                     (也就是 全0则0,有1为1)

4. 按(二进制)位异或         ^ 

(1)列出 & 两边的操作数的二进制序列 

(2)按对应二进制位    进行按位或

(3) 按位或的规则是: 相同为0 , 相异为1

                                     (也就是 全0,或者全1  为0      有0 和1的为 1)

5.通过例子来理解位操作符

int a = 3;

int b =5;

(1)按位与   &

         int c = a & b;

a的二进制序列:  00000000000000000000000000000011

b 的二进制序列: 00000000000000000000000000000101

按位与的结果:     00000000000000000000000000000001

(2)按位或   |

           int c = a & b;

a的二进制序列:  00000000000000000000000000000011

b 的二进制序列: 00000000000000000000000000000101

按位或的结果:    00000000000000000000000000000111

(3)按位异或   ^      (有知识点补充)

         int c = a & b;

a的二进制序列:    00000000000000000000000000000011

b 的二进制序列:   00000000000000000000000000000101

按位异或的结果:  00000000000000000000000000000110

知识点补充: (是做下面的面试题的关键)

1.      两个相同变量异或的值还是那个值

a ^ a        就是0了

如:  int a =3;

a:       0 1 1

a:         0 1 1

a ^ a :   0 0 0      

2.     0和任意一个变量异或的值,是那个非0的值

0 ^ a       还是a

如:  int a =3;

a:       0 1 1

0:          0 0 0

a ^ 0 :   0 1 1            

6.通过面试题来应用  位操作符

(1)题目:交换2个int变量的值,不能使用第三个变量,
                    即a = 3,b = 5,交换之后 a = 5,b = 3;

(2)用位操作符解答

 最好先将a ^ b 赋给a

(3)其它解法

注意该种解法的缺陷:

当a + b 的值超过int型的最大值时,会出现溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值