当前位置: 首页 > 知识库问答 >
问题:

使用byte和int的Java中的按位操作[重复]

全心思
2023-03-14

我正在用java做一些位操作

我有2个阵列:

byte[] bitArray;
final  byte [] bitMask = {1,2,4,8,16,32,64,-128};

然后我尝试|bitArray中的一个字节,掩码中的一个字节。

bitArray[i] = bitArray[i] | bitMask[j]

问题是我遇到了一个编译器错误。

“错误可能丢失精度”所需字节已找到int

问题是我如何修复它?

共有1个答案

闻人栋
2023-03-14

这里发生的是二进制数字提升。Java将在执行操作之前将大多数二进制运算符(包括按位运算符或|运算符)的操作数类型提升到至少intbitArray[i]|bitMask[j]的结果是int,而不是byte

操作完成后,必须显式将其转换回字节。

bitArray[i] = (byte) (bitArray[i] | bitMask[j]);

此外,使用复合运算符表示不必回溯到字节。

bitArray[i] |= bitMask[j];
 类似资料:
  • 问题内容: 考虑以下代码: 我可以用Python(和其他语言)理解算术运算符,但我对“按位”运算符却不太了解。在上面的示例(来自Python书)中,我了解了左移功能,但不了解其他两个。 另外,按位运算符实际上是用来做什么的?我会喜欢一些例子。 问题答案: 按位运算符是对多位值进行操作的运算符,但在概念上一次只能处理一位。 仅当其两个输入均为1时,才为1;否则为0。 如果其输入之一或全部为1,则为1

  • 假设我们在C++中有一个形式的函数,它应该从中读取5个字符的二进制序列,将它们转换为int=i,并将的第i个位置从切换为。 示例:为: ,因此值为5和18。 主要为空,有32个空位,因此它是:。 由于我们读取的数字是5和18,所以我们必须在中将(从0开始计数)第5个转换为和第18个转换为。 最终的看起来如下:。换句话说,我们的是一个特定类型的集合,如果中有一个数字,则“点亮”。 我想对此进行编码,

  • 我目前正在处理Java 8中使用Lambdas进行按位操作的循环转换问题。 给定一组复杂的条目,循环需要遍历所有条目并对它们调用给定的方法(方法返回布尔值)。之后,返回结果。 谢谢!

  • 我有一个“从int到byte的可能有损转换”错误的问题,但我没有在代码中将整数转换为byte。 这是笔记本课 我不知道为什么我会得到这个错误。有人能帮助我吗?谢谢你。

  • 问题内容: 如果您的二进制数为10110,我如何获得它以返回5?例如,一个告诉使用多少位的数字?下面列出了一些类似的示例: 101应该返回3 000000011应该返回2 11100应该返回5 101010101应该返回9 如何在Java中获得最简单的方法?我想出了以下方法,但可以更快地完成吗: 问题答案: 最简单? 如果您正在寻找算法,则Java API的实现者同意您的分而治之移位方法: 编辑

  • 这个代码的大O是什么?我知道除了递归部分,所有的线都是O(1)。我不确定递归的大O是什么,我有一种感觉,它仍然是O(1),因为我们没有比O(1)更差的线,但通常递归是O(n)。 代码: 编辑:顺便说一句,这不是家庭作业,而是为面试做准备。