我是靠谱客的博主 高大电灯胆,最近开发中收集的这篇文章主要介绍移位运算(左移和右移),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如有转载,请注明出处:  http://www.cnblogs.com/flydoos/archive/2011/09/06/2169280.html

 

移位运算(左移和右移)

 

这是网上流传的“变态级JAVA程序员面试32问”的其中一题(二十八题),然后下面给出来的答案是

 

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
  有C背景的程序员特别喜欢问这种问题。
 答案: 2 << 3

 

粗看似乎很在理,大致想来2<<3会是移位操作,在Java的字节码中移位指令是ishl(右移),而在CPU上的硬件指令可能就会是shl(算术右移指令)。其实不然,如果熟悉汇编语言,还考虑过编译优化,2<<3根本不会使用移位操作,而是在编译时就优化计算出16来了。


----------------------------------------------------------------


下面开始进行简单的说明:

 

通俗的说,位移的实现是将数据转换成二进制后,进行左右移动的。如果左移,则右边补零,如果是右移,则是左边补零,后边溢出的则去掉。因此,左移可以理解为整数的乘法,而右移则是理解为整数的取整除法。

  左移 (<<)

  将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
  左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

  x<<1= x*2 
  x<<2= x*4 
  x<<3= x*8 
  x<<4= x*16

  同理, 右移即相反:

  右移 (>>) 
  将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。

  右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

  x>>1= x/2 
  x>>2= x/4 
  x>>3= x/8 
  x>>4= x/16


<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1) | 评论(0) | 转发(0) |
0

上一篇:快速排序优化

下一篇:卡特兰数

相关热门文章
  • 编写安全代码——小心有符号数...
  • 字符串移位包含的问题...
  • 西三旗空调维修空调加氟561915...
  • python 海龟绘图
  • OJ-坐标移动
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • sql relay的c++接口
  • 我的ChinaUnix博客被锁定了,...
  • 怎样破解雅虎邮箱密码...
  • 虚拟机中ubuntu无线连接问题...
  • IBM DS3400 盘阵怎么查看是单...
  • 启动auditd时,报错如下,怎么...
给主人留下些什么吧!~~
评论热议

最后

以上就是高大电灯胆为你收集整理的移位运算(左移和右移)的全部内容,希望文章能够帮你解决移位运算(左移和右移)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部