掩码

0 篇文章 0 订阅

按位与运算常用于掩码.所以掩码指的是一些设置为开(1)或关(0)的位组合.

flages = flages & MASK ;

 把flages除一号位以外的所有位设置为0,因为使用按位与运算符&任何位与0组合都得0.

1号位不变(如果一号位是1,那么1&1得1,如果1号位是0,那么0&1得0,这个过程叫做使用掩码.

MASK  0 0 0 0 0 0 1 1

flages  1  0  0 1  0  1  1 0

            0 0  0 0  0 0 1 0

     把除了1号位,其他位都设为0

flages = flages & MASK 

也可以简化为  flages & =MASK

 

打开位:

    如果为了打开某位,而让其他位不变,那就用位与| 

例如

flag =flage | MASK 

上例中MASK只有一号位为1,其他位都为0,在位或运算中,任何位与1结合都为1,与0结合都为本身

所以,flag 除了一号位打开,其他位都为本身

第二个例子

flag | MASK 

(00001111) |(10110110)

MASK 中为1的位,flag与对应的位也为 1 ,MASK 中为0的位,flag 对应的位不变

 

关闭位:

      如果要关闭特定的位,例如关闭flags中的一号位,同样MASK 只有一号位为1

flags = flags & ~MASK

MASK只有一号位为1 ,其他位都为0,所以 ~MASK 的一号位位 0 ,其他为都为 1 ,位与运算中,

于1结合都为本身,与0结合都为0,所以一号位的初始值,都将设为0

假设 flags是00001111,MASK是10110110

flags = flags & ~MASK

即(00001111)&~(10110110)

结果为(00001001)

MASK中为1的位都被关闭,为0的位不变.

切换位:

    切换位是指将关闭了的位打开,或者把打开了的位关闭,这时候可以用异或^,异或是指如果b为1,那么b^1=0,b^0=1

也就是说,用异或,两个都是一样的,那么得0

flags = flags ^ MASK ;

例如flags是00001111,MASK 是10110110,

(0 0 0 0 1 1 1 1) & (1 0 1 1 0 1 1 0)

结果为:

(1 0 1 1 1 0 0 1)

flag中与MASK为1对应的位都切换了,MASK为0的位都对应不变.

检查位的值  :

有时想检查有的位是否为1,这时可以设置,一个某位为1,其他为0的掩码

例如 MASK只有一号位为1,其他都为0

flags & MASK

if((flags&MAPSK)==MASK)

       puts("Wow!");

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值