我正在制作一个加密任何类型文件的小型 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/