C++的位操作符备忘

首先在使用位向量操作符时强烈建议使用无符号类型、因为有符号类型在不同的机器上有不同的实现、所以有可能造成代码无法通用!

 

按位取反、按位或和按位与就不讲了、都比较简单易懂、讲按位异或吧

^、

比如有两个操作数、 12 ^ 17

所有按位操作都要先转换成二进制

12为1100

17为10001

按位异或的规则为同为1或者同为0则为0、否则都为1

下面比较两者、12的二进制为4位、要与17比较则12的二进制向左补0

01100    ->12

10001    ->17

11101    ->结果为29

 

 

 

再讲讲移位操作符吧、其实也狠简单、理解了就OK

比如这个例子 3 << 7

老例子、先转化成二进制、不过这里不需要两个都转化成二进制、只要把左操作数转化就可以了

现在这个例子是左移位方向、把3转化成二进制、然后向左移动

0011 -> 3

左移是右端空出的位用0来填补、这里的移位是3、所以结果为

110000000  -> 结果为384

 

右移也一样、3 >> 7、往0011右边移7位、由于3为int型、转认是4位的、所以向右移7位等于向左填充7个0、

000000011

但是除了前4位以外、后面都是长度之外被挤出去的、所以实际为

0000 ->也就是结果为0

 

 

 

 

参考文章:http://blog.csdn.net/mator/article/details/1376957

posted @ 2012-04-05 00:32  klobodnf  阅读(227)  评论(0编辑  收藏  举报