int why = 5000; 第一部分:
String value1 = Long.toHexString( why >> 16);
if("0".equals(value1))..................第二部分:
int value2 = why & 0xffff;第二句
int fainalV = 1000 - value2;
这两句话是在看不太明白
我也知道第一部分是右移动16位,然后变成 以十六进制无符号整数形式返回 long 参数的字符串表示形式,
但一般为什么要这么用啊?都什么时候用到移位啊?为什么要这么用啊?为什么移位后跟一个string,equals?第二句话我也知道是按照位与,但一般为什么要这么用啊?都什么时候用到按位与啊?为什么要这么用啊?
为什么与后做减法啊?哎也不知道自己说清楚了吗?先谢谢大家啊!

解决方案 »

  1.   

    学学C就知道了。
    不是经常看到面试题目,说做过C的程序员,招聘JAVA程序员的时候喜欢出的一个题目:
    用最快的方式实现2的3次方
    答案:2 << 3想想这道题的初衷你就明白了移位有什么用处。没错,运算效率比乘法、乘方指令都高。至于按位与(按位或,按位异或类似),这个在java里面用的不多,但在嵌入式开发中比比皆是。在BSP驱动开发中,经常用到操作芯片寄存器操作,比如某芯片有32根数据线,把高16位写1,低16位写0.用按位与/或就很容易了
      

  2.   

    位运算用的很少,几乎不用,尤其是如果做web层开发,根本用不到
      

  3.   

    1年半没搞java了,现在搞嵌入式。如果专从语言本身的角度来讲,感觉C的魅力应该是无穷无尽的。汇编也不错,但太底层。搞java上层太久,一下深入到如此底层还真难以适应
      

  4.   

    java  基本不用移位操作的。
    看看这个
    http://topic.csdn.net/t/20050709/21/4134197.html
      

  5.   

    a >> n ===== a / 2^n
    a << n ===== a * 2^n
    位操作的效率是高, 但是一般时候没有必要这样写, 这只会增加代码的难读和难维护性。
    因为编译器会根据实际情况进行类似的优化。
      

  6.   

    第二部分是求1000-why的低16位的差
      

  7.   

    http://blog.csdn.net/sxpujs/archive/2009/03/19/4005654.aspx
      

  8.   

    学java这么久了还是很少用到移位这个东西。
      

  9.   

    你说的有点问题吧?2 << 3 等价于 2 * 2^3吧,1 << 3这才是 2^3吧!
      

  10.   

    你这段代码是做什么用的?感觉写不是很好!PS:1 楼,2 的 3 次方应该是  1 << 3,不是  2 << 3
      

  11.   

    Java 中也能用到移位运算符,主要看具体的应用领域了。
      

  12.   


    YES,是1 << 3 = 8