我正在尝试理解一段代码但却无法清楚地了解几点 这是Java代码
private String firstMethod(int number){
return secondMethod(number >> 16 & 0xFF, 0).concat(secondMethod(number >> 8 & 0xFF, 1)).concat(secondMethod(number & 0xFF, 7));
}
private static String secondMethod(int value, int offset)
{
return thirdMethod(value >> 4, offset).concat(thirdMethod(value & 0xF, offset + 4));
}
private static String thirdMethod(int value, int offset)
{
String chars = getAlphabet();
int pos = (value + offset) % 16;
return chars.substring(pos, pos + 1);
}
传递给firstMethod
的值是第一次的随机数,对方法的所有后续调用都会传递增加1的值。
我很清楚有关使用& 0xFF
的按位右移操作,但是我仍然不清楚以下几点
任何人都可以帮助我理解那些2点
答案 0 :(得分:3)
按特定数字移动给定值(首先是16和8,而不是筛选等)
您正在打印字节为hexi-decimal。每个字节都是8位,因此您希望将每个字节移位
不清楚使用偏移量,特别是将某个数字作为偏移量。
我很确定偏移是a)不正确,b)掩盖/编码数据的一种非常模糊的方式。
要将数字打印为6字节的hexi-decimal String,您可以执行此操作。
System.out.println(String.format("%06x", 12345));
打印
003039
这要短得多。 ;)
>>
具有令人惊讶的低优先级。这意味着
number >> 16 & 0xFF
实际上是
number >> (16 & 0xFF)
或
number >> 16
你的内容是什么
(number >> 16) & 0xFF
或结果是无符号的。
(number >>> 16) & 0xFF
答案 1 :(得分:1)
整数是32位数。
因此,作为二进制数,您可以将数字表示为:
XXXXXXXXAAAAAAAABBBBBBBBCCCCCCCC (X,A,B,C代表0或1)。
数字>> 16给你XXXXXXXXAAAAAAAA。 数字>> 16& 0xFF为您提供AAAAAAAA
通过firstMethod编号分为3个字节:
AAAAAAAA和BBBBBBBB以及CCCCCCC(16班,8班和无班) 并给予第二种方法。
在secondMethod中,8位分为高4位和低4位。
在thirdMethod中,四个Bits转换为包含一个char的String。
但感觉取决于“getAlphabet()”。 也许对偏移量也会有一个有用的解释。
所以你必须提供进一步的信息!