求职不怕考
pcw-chendx@vip.sina.com
与编程相关的招聘,都会准备很多考题,一不小心考生就在考题上栽了跟头,特别是没有多少工作经验的应届毕业生,往往回答得过于理论化,很难令考官满意。为此,我们特意推出本系列,通过对真实考题的分析让大家在回答考题时有更多的实用性,让考官满意,顺利找到工作。
位运算 优化运算速度
爪哇米工作室 陈跃峰
位运算在语言基础学习中比较枯燥,所以很多学生朋友未深入学习,也没有实际应用该基础知识,但是在实际的项目开发中,位运算由于其运算的速度优势,在很多的领域被广泛应用,所以在实际的招聘考试中,位运算的考题比较常见。
招聘题目:请写出求2的3次方最快的方法。
答案A:2x2x2
答案B:1 << 3
题目答案:B
为什么答案是B
答案A是计算2的3次方的数学方法,通过十进制运算方式实现题目要求的结果,但是在执行效率上无法满足题目的要求。为什么这种方法无法满足题目的要求呢?这就要从计算机的运算模式说起了。
计算机的运算模式是以二进制为基础,所以十进制运算在计算时会被转换成二进制再进行运算,而转换过程就会导致运行速度降低。计算2的3次方最快的方法应该是使用位运算中的移位运算符,通过二进制移位实现,这种方法可以提高运算速度。
通过这个题目,考官既考查了应聘者是否对程序的执行效率有深刻的认识,也考查应聘者是否具备位运算的相关知识。位运算在程序开发中非常常见,合理使用位运算可以提高程序的执行效率,所以我们平时使用的软件大多数都用到了位运算操作。下面我们来看看位运算操作在实际开发中是如何被应用的。
位运算存储数据
利用位运算存储数据,主要是为了减少程序占用的内存。以int数据为例子,如果按照十进制的方式存储数据,一个32位的int变量只能存储一个数值,而如果使用二进制方式存储数据(缺点是只能存储0或1两个数据)则可以存储32个数据,将极大的节约内存。
例如,在一个int变量的从右侧开始倒数第2位存储数据,则存储和读取数据的代码如下所示:
int bData = 0;
//存储数值1
bData = bData | (1 << (2 - 1));
//存储数值0
bData = bData & (~(1 << (2 - 1));
//读取数据
int
n = bData & (1 << (2 - 1));
点评:在该代码中,将需要存储的数据(0或1)存储在变量bData的倒数第二位中,所以在存储时,则只需要将倒数第二位的数值改变,其他位的数值不改变即可。所以在存储1时,不论bData的数值是多少,只需要和二进制数据10进行位或运算就可以将倒数第二位置1,而需要存储0时,则需要bData和0xfffffffd进行位与运算,即可达到清零倒数第二位的目的。
需要注意的是,有些可能会认为在存储数值0时,会使用如下的代码实现:
bData = bData | (0 << (2 - 1));
其实这样是错误的,因为0无论左移多少位都还是0,这样在进行位或运算时,0和1位或得到的结果会是1,无法实现设置对应的位为0的目的,所以需要使用以上的代码进行实现。
异或位运算简单加密
利用位运算的计算速度快,以及异或的特性(和同一个数字异或两次还是自身),可以用来简单加密数据,且加解密的速度会非常快。这种加密方式强度比较低,但是可以用于一般的加解密任务。
例如,假设密匙是数字123,则加解密一个byte数组的代码如下:
byte[]
b = {1,2,3,5,6};
byte
key = 123;
//依次加密的代码
for(int
i = 0;i < b.length;i++){
b[i]
= (byte)(b[i] ^ key); //利用异或加密
}
//解密的代码
for(int
i = 0;i < b.length;i++){
b[i]
= (byte)(b[i] ^ key); //利用异或解密
}
点评:在该代码中,对数组b使用密匙key进行加密,加密的过程是将数组b中每个元素和key进行异或,加密以后的数据可以在实际应用中进行存储或网络传输,而解密时的操作和加密时一样,使用这种简单的加密方式虽然保密性不高,但是加解密的速度确实是很值得称赞的。
分享到:
相关推荐
python-位运算(csdn)————程序
摘自2014国家集训队论文《回归本源——位运算及其应用》,详细描述了位运算的众多巧妙用法,对于位运算的深入运用可以参考。
运算器实验.ppt————电子版_ppt版
浅谈python运算符运算法则(csdn)————程序
厦门大学电子技术实验八集成运算放大器的运用——运算器.doc
CPU运算突破瓶颈的希望——原子级晶体管.pdf
学生不按运算法则解题,运算法则还要教吗——以“解分式方程”为例看数学运算中的深度学习及其实践着力点.pdf
【转载】常用位操作 位运算应用口诀 ...位运算之美——用+,-和位运算实现正整数除法和取模(二) 位运算之美——用+,-和位运算实现正整数除法和取模(一) 位运算总结 收藏 位运算总结 用位运算求整数的绝对值的三种方法
人教四年级下册运算定律与简便计算——整理与复习PPT教案.pptx
人教版四年级下册运算定律与简便计算——整理与复习PPT教案.pptx
有关 位运算 的简介
四则运算与运算定律——整理与复习.pptx
#资源达人分享计划#运算放大器基础教程,挂图,很实用方便。
计算机组成实验——验证74LS181运算和逻辑功能.docx计算机组成实验——验证74LS181运算和逻辑功能.docx计算机组成实验——验证74LS181运算和逻辑功能.docx计算机组成实验——验证74LS181运算和逻辑功能.docx计算机...
c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算c++位运算
四则运算与运算定律——整理与复习PPT学习教案.pptx
c语言位运算c语言位运算c语言位运算c语言位运算c语言位运算
四则运算与运算定律——整理与复习课件PPT学习教案.pptx