布尔运算和应用掩码运算

一个有助于思考布尔运算和应用掩码运算的典型方式之间的关系:

int bis(int x, int m);  // 根据掩码m来置x
int bic(int x, int m);  // 根据掩码m来清x

// 仅使用bis和bic来计算 x|y 
int bool_or(int x, int y) {
    int r = bis(x, y);
    return r;
}

// 仅使用bis和bic来计算 x^y 
int bool_xor(int x, int y) {
    int r = bis(bic(x, y), bic(y, x));
    return r;
}


 bis运算等价于布尔or,bic(x, m)等价于 x&~m;

现实现x对应位为1且m对应位为0时,该位为1,故:

x^y = (x&~y)  |  (~x&y)

 故:bis(bic(x,  y), bic(y, x))

 

>> 在c/c++大多数实现中都是算术右移:

int i=-1;

i = i>>4;

printf("%d\n", i);

输出是-1

 

1 << 2 + 3 << 4 等价于 1 << (2 + 3) << 4

故输出512而不是52

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值