public void putLength(int vol)
{
conData[inc++] = (byte)(vol >>> 16 & 0xff);
conData[inc++] = (byte)(vol >>> 8 & 0xff);
conData[inc++] = (byte)(vol & 0xff);
}其中 vol >>> 16 & 0xff 是什么意思呢
我理解 唉 貌似理解不了 望大虾们解释解释
另外,为什么要这么做 特别是 那 >>>看这特别不习惯
{
conData[inc++] = (byte)(vol >>> 16 & 0xff);
conData[inc++] = (byte)(vol >>> 8 & 0xff);
conData[inc++] = (byte)(vol & 0xff);
}其中 vol >>> 16 & 0xff 是什么意思呢
我理解 唉 貌似理解不了 望大虾们解释解释
另外,为什么要这么做 特别是 那 >>>看这特别不习惯
& 是“与”运算
0x 开头的是指16进制的数
至于那些运算是怎么算的就查书
对应的还有>>算数右移,是带符号位的int i = 0xFFFFFFFF;
int i1 = i >> 1;
int i2 = i >>> 1;
System.out.printf("i1 = 0x%X, i2 = 0x%X", i1, i2);输出结果:i1 = 0xFFFFFFFF, i2 = 0x7FFFFFFF
>>也是按位右移不过他是有符号位的&也是位运算(按位与)
0xff是16进制,16进制很容易转成二进制再位移就清楚了
比如
0xff(十六进制) --> 11111111 (二进制)
0xff >>> 3 = 00011111 = 31(十进制) = 0x1f
>>>三个的话高位肯定补0
>>两个的话高位原来是什么就补什么。
byte[] bytes = new byte[3];
bytes[0] = (byte)(i >>> 16 & 0xFF);
bytes[1] = (byte)(i >>> 8 & 0xFF);
bytes[2] = (byte)(i & 0xFF);System.out.println(Integer.toHexString(bytes[0] & 0xFF));
System.out.println(Integer.toHexString(bytes[1] & 0xFF));
System.out.println(Integer.toHexString(bytes[2] & 0xFF));
再提供一个样例,有助于 & 的理解int i = 0xAB;
System.out.println(Integer.toHexString(i & 0xFF));
System.out.println(Integer.toHexString(i));