java - 按位右移和 0xFF | java

标签 java bit-manipulation

我试图理解一段代码,但无法清楚地了解一些要点 这是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/

相关文章:

java - Gradle 未编译 lib 文件夹中的依赖项 jar

java - 从 Autowiring bean 获取数据源时出现空指针异常

c - 创建 32 位位掩码的最有效方法

c++ - 如何在 unsigned int 上使用位标志以在其中存储额外的 bool 值

c++ - 基于模式创建位掩码作为 constexpr

c# - 对象是类,因为枚举是...?

java - 当您还在应用中使用 LVL 时,初始化 AdMob 的正确方法是什么?

java - 为什么我使用javamail发送到outlook账户时回复邮件是以附件形式发送的?

javascript - 位操作设计

java - Java 中移位到第 64 位