C语言tea,c语言中的位运算

由于大一学习C语言的时候在位运算这块老师是简单提了下,所以当时一直没在意这个东西,觉得没什么用处。今天在数据结构习题集上碰到一到题目,设计到了异或运算,顺便把位运算整个整理一下。

c语言中给出的位运算有位与运算、位或运算、位异或运算、左移运算以及右移运算。

按照“如果同为1则结果为1否则为0”的原则逐位求与运算。(注意这里是相对于二进制的每一位而言的)

例如:9&2=9(00001001)&5(00000101)=1(00000001)。

1)与运算可以用来实现特定位的清零工作(只需将清零位置置0,其余位置置1)。

例如:10011010,需要将高4位清零,可以让此数字和00001111做与运算即可。

2)可以取得特定的位(只需将待取位置1,其余位置0)。

例如:00011101,想要取到第5位,只需和00010000做与运算即可。

按照“如果同为0则结果为0否则为1”的原则逐位求或运算。

例如:3|2=3(00000011)|2(00000010)=3(00000011)。

1)可以将操作数中的特定位置1。

按照“同0异1(即同为0或者同为1时为0否则为1)”的原则逐位求异或运算。

例如:5^7=5(00000101)^7(00000111)=2(00000010)。

1)使特定位的值取反(只需将需取反的位置1,其余为0)。

例如:00101101后4位取反,只需跟00001111求异或运算即可

2)不引入第三变量交换两个变量的值。

a=a^b;b=a^b;a=a^b;(这里注意原因是这样的:a^(a^b)=(a^a)^b=b;b^(a^b)=(b^b)^a=a;)

从整数的角度是很好理解的:a^a为0再^b结果肯定为b(0与任何位求异或,位不变:0^1=1,0^0=0),而

a^(a^b)=b可以从一个表格理解:

a

b

结果

0

0

0

0

1

1

1

1

0

1

0

1

从表格可以看出,单位求异或后用结果与操作数相异或即可得到另一操作数,那么把单位推广到多位即可理解了。(这个我在今天的数据结构题集中遇到了此问题,算是理解了

a4c26d1e5885305701be709a3d33442f.png)

形如a<

例如:4<<2=8,00000100全部左移1位即00001000。

形如a>>b的二目运算符,将a操作数的各位全部右移b位,低位丢弃,区别于左移运算如果为负数则高位补1,如果为正数则补0.

例如:-3>>2=-96 10000011(-3)>>2=11100000(-96)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值