【发布时间】:2011-04-20 05:42:41
【问题描述】:
所以昨天在工作中,我不得不编写一个应用程序来计算 AFP 文件中的页数。所以我翻阅了我的 MO:DCA 规范 PDF 并找到了结构化字段 BPG (Begin Page) 及其 3 字节标识符。该应用程序需要在 AIX 机器上运行,所以我决定用 Java 编写它。
为了最大效率,我决定读取每个结构化字段的前 6 个字节,然后跳过该字段中的剩余字节。这会让我:
0: Start of field byte
1-2: 2-byte length of field
3-5: 3-byte sequence identifying the type of field
所以我检查字段类型并增加一个页面计数器,如果它是BPG,如果不是,我就不会。然后我跳过字段中的剩余字节而不是通读它们。在这里,在跳过(实际上是在字段长度中)是我发现 Java 使用有符号字节的地方。
我做了一些谷歌搜索,发现了很多有用的信息。当然,最有用的指令是按位执行 & 到 0xff 以获得 unsigned int 值。这对于我获得可用于计算要跳过的字节数的长度是必要的。
我现在知道在 128 时,我们从 -128 开始倒数。我想知道的是这里的按位运算是如何工作的——更具体地说,我是如何得出负数的二进制表示的。
如果我正确理解按位&,您的结果等于一个仅设置了两个数字的公共位的数字。所以假设byte b = -128,我们会有:
b & 0xff // 128
1000 0000-128
1111 1111 255
---------
1000 0000 128
那么我如何以 -128 获得 1000 0000?我如何获得像 -72 或 -64 这样不太明显的东西的二进制表示?
【问题讨论】: