《C++》左移按位与按位异或按位或优先级

这都是位操作,其中:
  ~ : 意思是按位取反,类似于非(!)的关系,取它的反面。
  <<: 意思是左移,移动二进制的位。
  & : 意思是按位与,类似于与(&&)的关系,一假为假。
  ^ : 意思是按位异或,通俗地说就是相同为0,不同为1.
  | : 意思是按位或,类似于或(||)的关系,一真为真。
  优先级:按位取反 > 移位 > 按位与 > 按位异或 > 按位或

第一个式子:x | (1<<4) | (1<<3) | (1<<2),写出它们的二级制码:

1 :0 0 0 0 0 0 0 1
  1<<2:0 0 0 0 0 1 0 0 ★★
  1<<3:0 0 0 0 1 0 0 0 ★★
  1<<4:0 0 0 1 0 0 0 0 ★★
  (1<<4) | (1<<3) | (1<<2):0 0 0 1 1 1 0 0 ★★★
  显然,拿(1<<2),(1<<3),(1<<4)与x求位或的结果就是将x二进制位中第3、4、5位(从低位向高位计数)中的数变为1。此操作多用来恢复位。

第二个式子:x & ~(1<<2) & ~(1<<0),写出它们的二级制码:
  1 :0 0 0 0 0 0 0 1
  1<<0 :0 0 0 0 0 0 0 1
  ~(1<<0):1 1 1 1 1 1 1 0 ★★
  1<<2 :0 0 0 0 0 1 0 0
  ~(1<<2):1 1 1 1 1 0 1 1 ★★
  ~(1<<2) & ~(1<<0):1 1 1 1 1 0 1 0 ★★★
  显然,这两个式子与x进行求位与的结果就是将x第1、3位处的二进制码变为0,此操作多用来清除位。

第二个式子:x ^ (1<<3) ^ (1<<2),写出它们的二级制码:

1 :0 0 0 0 0 0 0 1
  1<<2:0 0 0 0 0 1 0 0 ★★
  1<<3:0 0 0 0 1 0 0 0 ★★
  (1<<3) ^ (1<<2):0 0 0 0 1 1 0 0 ★★★
  显然,这两个式子与x进行求异或的结果就是将x第3、4位处的二进制码取反(0与1生成1,1与1生成0),其他位置不变。此操作多用来反转位和保留位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值