Java 错误 : possible loss of precision

标签 java byte bytearray

我正在制作一个加密任何类型文件的小型 Java 程序。我这样做的方式如下:我打开输入文件,在与该文件大小相同的字节数组中读取它,然后进行编码,然后将整个数组写入名为输出的 .dat 文件。数据。为了索引字节数组,我使用了一个 int 类型的变量。代码:

        for(int i : arr) {
            if(i>0) {
                arr[i] = arr[i-1]^arr[i];
            }
        }

'arr' 是一个与输入文件大小相同的字节数组。

我得到的错误:CodingEvent.java:42: error: possible loss of precision

arr[i] = arr[i-1]^arr[i];

(箭头指向 ^ 运算符)

必需:字节

发现:整数

怎么了?你能帮帮我吗?

最佳答案

与直觉相反,byte ^ byte 的结果是 int。将表达式的结果赋值回 arr[i] 时,对表达式的结果使用强制转换:

arr[i] = (byte)(arr[i-1]^arr[i]);

这是因为运算符被定义为执行 binary numeric promotion在它的操作数上,所以它真正在做什么(在这种情况下)是:

arr[i] = (int)arr[i-1]^(int)arr[i];

...这自然会导致 int。这就是我们需要强制转换的原因。

关于Java 错误 : possible loss of precision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17672906/

相关文章:

java - 用于 ElasticSearch 的 Spring Boot Micrometer 与 APM Java 代理

java - 如何序列化稍后发送的 HttpPost 请求

java - String.getBytes() 如何将字符串转换为字节?

ruby - 在 Ruby 中从一个字节获取两个半字节

c# - 如何在 C# 中将字节数组转换为 double 组?

c++ - Qt4 : write QByteArray to file with filename?

ios - Swift 将 Int [int8] 的有符号数组转换为 Int [UInt8] 的无符号数组

java - 读取.txt文档并在Java中进行编辑时出现问题

java - 字节数据类型如何有助于节省大型数组中的内存

java - 这个带有向上和向下按钮的数字文本框是什么控件?