内容简介:以下所有都是针对64位机来说的.一个byte占8个bit,对于bit的操作就是位运算.左移,在bit级别对一个数整体向左移动,在右边用0填充. 例如对一个整数1,二进制表示为
以下所有都是针对64位机来说的.
bit
一个byte占8个bit,对于bit的操作就是位运算.
左移,在bit级别对一个数整体向左移动,在右边用0填充. 例如对一个整数1,二进制表示为 1
, 向左移动一个bit,二进制就变成了 10
, 也就是十进制的2,再向左移一位,
二进制变成了 100
, 对应的十进制数是 4
, 对于左移运算, 移动n位相当于原数
乘以2的n次方, 但是如果溢出的话, 结果就不是理想情况中的结果了.
对于右移, 把原有的位移动以后, 有两种填充方式. 一种是在左边填补原来最高位的值, 这称为算术右移, 另一种方式是填补0, 称为逻辑右移.
.. code:: java
$ cat Test.java
class Test {
public static void main(String[] args) {
int i = -10;
System.out.println(i<<1);
System.out.println(i>>1);
System.out.println(i>>>1);
}
}
$ javac Test.java && java Test
-20
-5
2147483643
>>>
是逻辑运算, 在左边填充了大把的0, 所以补码认为这是正数, 而算术右移保持
了算术上的正确性, 于是就有了上面的结果.
用位运算优化
cpu计算乘法很慢,原因是对于一个m位乘以n位的运算,要计算O(m * n)次, 而对于加法, 只要计算O(max(m,n))次.
所以,可以利用左移来优化乘法, 例如 11*12, 可以变成 11 * (2^3 + 2^2)
,
就是 11 << 3 + 11 << 2
, 便会大幅度提高运算速度.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Go 语言操作 MySQL 之 事务操作
- Go语言开发(十八)、Go语言MySQL数据库操作
- C语言中点操作符(.)和箭头操作符(->)的不同之处
- Golang 语言之字符串操作
- R 语言:数据操作 dplyr 包
- C语言解析常用字符操作函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Design Patterns
Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99
You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!