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?第二句话我也知道是按照位与,但一般为什么要这么用啊?都什么时候用到按位与啊?为什么要这么用啊?
为什么与后做减法啊?哎也不知道自己说清楚了吗?先谢谢大家啊!
String value1 = Long.toHexString( why >> 16);
if("0".equals(value1))..................第二部分:
int value2 = why & 0xffff;第二句
int fainalV = 1000 - value2;
这两句话是在看不太明白
我也知道第一部分是右移动16位,然后变成 以十六进制无符号整数形式返回 long 参数的字符串表示形式,
但一般为什么要这么用啊?都什么时候用到移位啊?为什么要这么用啊?为什么移位后跟一个string,equals?第二句话我也知道是按照位与,但一般为什么要这么用啊?都什么时候用到按位与啊?为什么要这么用啊?
为什么与后做减法啊?哎也不知道自己说清楚了吗?先谢谢大家啊!
不是经常看到面试题目,说做过C的程序员,招聘JAVA程序员的时候喜欢出的一个题目:
用最快的方式实现2的3次方
答案:2 << 3想想这道题的初衷你就明白了移位有什么用处。没错,运算效率比乘法、乘方指令都高。至于按位与(按位或,按位异或类似),这个在java里面用的不多,但在嵌入式开发中比比皆是。在BSP驱动开发中,经常用到操作芯片寄存器操作,比如某芯片有32根数据线,把高16位写1,低16位写0.用按位与/或就很容易了
看看这个
http://topic.csdn.net/t/20050709/21/4134197.html
a << n ===== a * 2^n
位操作的效率是高, 但是一般时候没有必要这样写, 这只会增加代码的难读和难维护性。
因为编译器会根据实际情况进行类似的优化。
YES,是1 << 3 = 8