为了账号安全,请及时绑定邮箱和手机立即绑定

了解为什么执行某些位操作操作

了解为什么执行某些位操作操作

慕沐林林 2022-11-30 10:14:24
下面是 Java 中 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 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

this.read()大概返回 8 个“有趣”位,因为& 255“检索”仅最后 8 位,将其移动 8 位意味着现在第 9-16 位保存数据。
然后执行另一次读取 +&再次获得 8 位,|通过之前步骤的移位位,您现在有一个int设置了 16 个相关位的位:位 1-8 保存第二次读取的结果,而位 9-16 保存位第一次阅读。

查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信