按位与的作用,左移,右移的作用各是什么
今天看以前别人写的代码。
宏定义用了好多按位与、或、左移右移。
都有什么作用啊???
我就知道这些方法的结果是什么。
却不知道作用是什么??
高手给讲一讲倍,
不要百度来的答案。谢啦
[解决办法]
根本的就是:按位左移,所有位都向左移动一位,左边补零,右边溢出则舍去。数字上的意思是左移一位,乘以2。按位右移有两种,一种是逻辑右移,另一种是算术右移。逻辑右移左边补零,右边溢出舍去,算术右移左边补最高位,右边溢出舍去。c/c++中没有详细规定什么时候用什么右移,但是有个没有验证的说法是,有符号的是算术右移,无符号的是逻辑右移。当然,右移在数字上就是除以了2了。
按位操作的好处就是计算性能好了,能提升速度。计算机实现乘除法是很费力的,而人工的给它用按位优化一下就好多了,听说编译器能再一定程度上优化一部分。但咱也是菜鸟,没验证过。
再别的功能就是非数字计算方面的了,这个很灵活,说实话我也不知道该怎么说,比如用于标记方面的。。。 。。。
java中对于右移有严格的定义,没有歧义,一种是>>,另一种是>>>。这个好很多。