//key & hash are both byte[]
int leftPos = 0, rightPos = 31;
while(leftPos < 16) {
//possible loss of precision. required: byte, found: int
key[leftPos] = hash[leftPos] ^ hash[rightPos];
leftPos++;
rightPos--;
}
为什么Java中两个字节的按位运算会返回一个int?我知道我可以把它转回到字节,但它看起来很傻。
答案 0 :(得分:20)
因为语言规范是这样说的。它没有任何理由,但我怀疑这些是最有可能的意图:
答案 1 :(得分:5)
如果它是正确的并且没有值可以导致这种精度损失,换句话说:“不可能的精度损失”编译器应该关闭......并且需要纠正,并且不应该添加任何强制转换这个:
byte a = (byte) 0xDE;
byte b = (byte) 0xAD;
byte r = (byte) ( a ^ b);
答案 2 :(得分:2)
两个字节上没有Java按位运算。您的代码隐式且静默地将这些字节转换为更大的整数类型(int
),结果也是该类型。
您现在可能会质疑在未定义的字节上保留按位运算的合理性。
答案 3 :(得分:0)
在人们已经指出的类似问题之一的答案中,这是某个地方:
http://blogs.msdn.com/oldnewthing/archive/2004/03/10/87247.aspx