与补码位或

在看位处理代码时经常就会看到:(变量)与(自己的补码)做位或,也就是x|-x

这个处理的结果就是:得到一个值y,y从最低位开始有多少个连续的0,那x也一样。

例如:

1)

1010 1011 1100 1101   --> x

0101 0100 0011 0011   --> -x

1111 1111 1111 1111   --> x|-x

2)

1010 1011 1100 1000   --> x

0101 0100 0011 1000   --> -x

1111 1111 1111 1000  --> x|-x

3)

1010 1000 0000 0000   --> x

0101 1000 0000 0000   --> -x

1111 1000 0000 0000  --> x|-x

产生这样的效果归功于补码的定义——全部位取反后加1,而这个1就把从最低位开始第一段连续的1全部变成0(因为进位),结果这段0就跟原码中的0一样了,在位或的时候还是为0。

posted @ 2013-05-13 16:57  Miner Mars  阅读(166)  评论(0编辑  收藏  举报