我试图理解一段代码,但无法清楚地了解一些要点 这是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
的使用我也很清楚,但是下面几点我还是不太清楚
- 按特定数字移动给定值(例如 16 和 8 首先比不筛选等)
- 不清楚offset的使用,具体是传递某个数字作为offset。
谁能帮我理解这两点
最佳答案
Shifting given value by specific number (like 16 and 8 for first than no sift etc)
您正在将字节打印为十六进制。每个字节都是 8 位,所以你想将每个字节移动
Not clear about use of offset ,specifically passing certain number as offset.
我很确定偏移量是 a) 不正确,b) 一种非常晦涩的屏蔽/编码数据的方式。
要将数字打印为 6 字节的十六进制十进制字符串,您可以这样做。
System.out.println(String.format("%06x", 12345));
打印
003039
这要短得多。 ;)
>>>
的优先级低得惊人。这意味着
number >> 16 & 0xFF
实际上是
number >> (16 & 0xFF)
或
number >> 16
你的意思是
(number >> 16) & 0xFF
或者结果是无符号的。
(number >>> 16) & 0xFF
关于java - 按位右移和 0xFF | java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594113/