了解为啥执行某些位操作操作
Posted
技术标签:
【中文标题】了解为啥执行某些位操作操作【英文标题】:Understanding why certain bit manipulation operations are performed了解为什么执行某些位操作操作 【发布时间】:2019-05-15 18:16:20 【问题描述】:以下是 Java 中 Keytab 实现的源代码。这个 sn-p 从 keytab 文件中读取密钥版本。我无法理解这是如何工作的。 为什么要进行按位与和左移操作?
我的代码调用:
KeyTab keytab = KeyTab.getInstance(keytabFile); // passing keytab file location.
此文件为二进制格式。 KeyTabInputStream 读取数据。
private void load(KeyTabInputStream var1) throws IOException, RealmException
this.entries.clear();
**this.kt_vno = var1.readVersion();**
if (this.kt_vno == 1281)
var1.setNativeByteOrder();
boolean var2 = false;
while(var1.available() > 0)
int var4 = var1.readEntryLength();
KeyTabEntry var3 = var1.readEntry(var4, this.kt_vno);
if (DEBUG)
System.out.println(">>> KeyTab: load() entry length: " + var4 + "; type: " + (var3 != null ? var3.keyType : 0));
if (var3 != null)
this.entries.addElement(var3);
public int readVersion() throws IOException
int var1 = (this.read() & 255) << 8;
return var1 | this.read() & 255;
【问题讨论】:
请添加更多上下文。指向在线源代码或至少粘贴整个方法体,以便人们清楚地了解类型和语义。 【参考方案1】:this.read()
大概返回 8 个“有趣”位,因为 & 255
“检索”仅最后 8 位,将其移动 8 位意味着现在 9-16 位保存数据。
然后执行另一次读取 + &
再次获得 8 位,|
与前一步的移位位相比,您现在有一个 int
设置了 16 个相关位:位 1-8 保存第二次读取的结果,而第 9-16 位保存第一次读取的位。
【讨论】:
更多可能read
返回byte
(也是8位,同意),你需要& 255
来避免(抵消)符号扩展以上是关于了解为啥执行某些位操作操作的主要内容,如果未能解决你的问题,请参考以下文章