布尔运算和应用掩码运算

来源:互联网 发布:js 鼠标离开 div隐藏 编辑:程序博客网 时间:2024/04/27 06:50

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

int bis(int x, int m);  // 根据掩码m来置xint 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

原创粉丝点击