bit-manipulation - Java 使用位运算符 & 将十进制转换为 12 位
问题描述
为此,我正在使用 Java。
我有代表'a'字符的代码97是ascii。我将 97 转换为二进制,得到 1100001(7 位) 我想将其转换为 12 位,我可以将前导 0 添加到现有的 7 位,直到它达到 12 位,但这似乎效率低下。我一直在考虑使用 & 位运算符将除 97 的最低位之外的所有位都设为零以达到 12 位,这可能吗?我该怎么做?
byte buffer = (byte) (code & 0xff);
上面的代码行会给我 01100001 不是吗?
解决方案
这给了我 1100001(7 位)
您的值buffer
是 8 位。因为这就是 a byte
:8 位。
如果code
有类型int
(在下面的评论中添加了详细信息),它已经是一个 32 位数字,在这种情况下,有 25 个前导零位。你不需要对它做任何事情。它有你想要的所有东西。
没有 12 位的 Java 整数类型,也不能直接实现,因为 12 不是字节大小的倍数。目前还不清楚为什么你想要正好 12 位。你认为额外的 20 个零位会有什么危害?
重要的事实是,在 Java 中,整数类型(char
、byte
、int
等)具有固定数量的位,由语言规范定义。
参考你原来的code & 0xff
-code
有32位。通常,这些位可以具有任何值。
在您的特定情况下,您告诉我们这code
是 97,因此我们知道前 25 位code
为零;这是从 97 的二进制表示得出的。
同样,通常& 0xff
会将除低 8 位之外的所有位设置为零。在您的情况下,这没有实际效果,因为它们已经为零。没有“添加”任何位 - 它们始终存在。
推荐阅读
- java - Jena - 如何将资源链接到属性?
- class - 如何将构造函数添加到 Dart 中的现有类?
- python - ValueError:在实现 sklearn 时无法将字符串转换为浮点数
- javascript - jQuery - 如何删除此代码冗余
- ember.js - emberjs模型反向关系不清楚
- javascript - 为什么我的 javascript 代码运行不正常?
- uuid - 我应该担心 UUID 的唯一性吗
- javascript - 两个数字不相加
- karate - 如何在空手道中将 XML 响应与 Json 进行比较
- typescript - 如何在 TypeScript 中将不同的文件编译到不同的文件夹?