小博老师解读经典Java面试题—Java位运算
来源:互联网 发布:钱塘大数据交易平台 编辑:程序博客网 时间:2024/05/29 18:48
[面试原题]
我们经常会看到类似于下面这样的Java面试题:
请编写出效率最高的2乘以8的运算结果。
[正确答案]
2<<3
[面试技术点]
面试者是否了解、灵活运用java位运算技术。
面试者是否了解移位的速度要比算法快很多。
[步骤解读一]
小博老师首先为大家解读一下,什么是Java中的位运算。我们可以将Java中的位运算直观地理解为,对二进制数据进行的运算方式。比较常见的有移位、与位、或位、异或位等运算方式。
上述面试题考的就是面试者是否了解Java位运算中的移位。
我们首先来看一段代码:
// 博为峰 BWF全栈Java课程
// JavaSE课程模块
// 运算符章节 ->位运算
/* 2 的二进制数据 0010
* << 表示二进制数据向左移位
* 1 表示移位的步长
* */
System.out.println( 2<<1 );
/*
* 2 << 1 表示将2的二进制数据向左移位1次
* 0010 向左移位1次后变为 0100,也就是4
* */
由此可见,<<是向左移位符。2<<1表示的含义是将2的二进制数据,也就是0010,向左移位一次,变成了0100,也就是4。同理我们推算2<<2则应该表示将2的二进制数据0010向左移位2次,变成1000,也就是8。2<<3则应该表示将2的二进制数据0010向左移位3次,变成10000,也就是16。
我们编写代码并且运行验证小博老师的猜测:
// 博为峰 BWF全栈Java课程
// JavaSE课程模块
// 运算符章节 ->位运算
System.out.println( 2<<1 ); // 4
System.out.println( 2<<2 ); // 8
System.out.println(2<<3 ); // 16
由此我们可以看出规律,移位是对二进制数据进行的操作,因此左移位1次相当于就是将原值乘以2,左移位2次相当于就是将原值乘以4,左移位3次相当于就是将原值乘以8,也就是说,左移位n次相当于将原值乘以2的n次方。
我们回到文章开头的面试题,2乘以8的运算结果,我们可以解读为计算2乘以2的3次方的结果,因此就是2<<3。
同理,右移位应该就是使用>>运算符,编写程序验证:
// 博为峰 BWF全栈Java课程
// JavaSE课程模块
// 运算符章节 ->位运算
System.out.println( 64>>1 ); //32
System.out.println( 64>>2 ); // 16
System.out.println(64>>3 ); // 8
[步骤解读二]
至于为什么说2<<3的效率要高于2*8,这两者的核心区别在于移位(<<)的效率要高于运算符(*)。计算机采用二进制数据存储,只有1和0,内存中任何一个数据都是用单位存储的,位运算就是对内存中的单位进行的直接计算,其效率要远高于运算符(运算符先要把数据调到缓冲区后才能进行操作)。
- 小博老师解读经典Java面试题—Java位运算
- 小博老师解析经典Java面试题-&与&&运算符
- 小博老师收集Java经典面试题 ——Servlet和JSP常见面试题
- 小博老师解析Java经典面试题 ——常见Http状态号
- 小博老师解析经典Java面试题-redirect和forward的区别
- java面试题三 位运算符
- [经典面试题]位运算操作
- 经典Java面试题-Java中Char类型的运算
- java经典面试题
- Java经典面试题
- 经典java面试题
- java经典面试题
- java经典面试题
- JAVA经典面试题
- JAVA经典面试题
- Java经典面试题
- Java 经典面试题
- Java经典面试题
- csdn的处女博
- gulp-jscs插件使用遇到的错误
- js基础:数据类型,变量命名规范
- memset函数用法
- MySQL索引类型及创建方式的总结
- 小博老师解读经典Java面试题—Java位运算
- LeetCode 198 robber house
- Windows环境下Qwt安装和使用
- 854计算机基础——《计算机组成原理》考点汇总(七) 控制单元的功能和两种设计方法
- Android Studio 技巧全集(快捷键)
- Navicat破解
- Struts2文件下载
- C++ 委托 fastdelegate使用,实现类函数回调绑定
- ucosIII 时钟节拍和时间管理