首页 > 解决方案 > Java 使用位运算符 & 将十进制转换为 12 位

问题描述

为此,我正在使用 Java。

我有代表'a'字符的代码97是ascii。我将 97 转换为二进制,得到 1100001(7 位) 我想将其转换为 12 位,我可以将前导 0 添加到现有的 7 位,直到它达到 12 位,但这似乎效率低下。我一直在考虑使用 & 位运算符将除 97 的最低位之外的所有位都设为零以达到 12 位,这可能吗?我该怎么做?

byte buffer = (byte) (code & 0xff);

上面的代码行会给我 01100001 不是吗?

标签: bit-manipulationbitwise-operatorsbitwise-and

解决方案


这给了我 1100001(7 位)

您的值buffer是 8 位。因为这就是 a byte:8 位。

如果code有类型int(在下面的评论中添加了详细信息),它已经是一个 32 位数字,在这种情况下,有 25 个前导零位。你不需要对它做任何事情。它有你想要的所有东西。

没有 12 位的 Java 整数类型,也不能直接实现,因为 12 不是字节大小的倍数。目前还不清楚为什么你想要正好 12 位。你认为额外的 20 个零位会有什么危害?


重要的事实是,在 Java 中,整数类型(charbyteint等)具有固定数量的位,由语言规范定义。

参考你原来的code & 0xff-code有32位。通常,这些位可以具有任何值。

在您的特定情况下,您告诉我们这code是 97,因此我们知道前 25 位code为零;这是从 97 的二进制表示得出的。

同样,通常& 0xff会将除低 8 位之外的所有位设置为零。在您的情况下,这没有实际效果,因为它们已经为零。没有“添加”任何位 - 它们始终存在。


推荐阅读