用最有效率的方法算出2乘以8等于几?(C#移位运算)

出处:http://www.cnblogs.com/flydoos/archive/2011/09/06/2169280.html

C#移位运算(左移和右移)

 

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

 

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

 

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


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


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

 

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


C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算。

  左移 (<<)

  将第一个操作数向左移动第二个操作数指定的位数,空出的位置补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

  当声明重载C#移位运算符时,第一个操作数的类型必须总是包含运算符声明的类或结构,并且第二个操作数的类型必须总是 int


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值