Reputation: 2532
//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--;
}
Why would a bitwise operation on two bytes in Java return an int? I know I could just cast it back to byte, but it seems silly.
Upvotes: 30
Views: 16554
Reputation: 3176
If it's correct and there are no value that can cause this loss of precision, in other words : "impossible loss of precision" the compiler should shut up ... and need to be corrected, and no cast should be added in this :
byte a = (byte) 0xDE;
byte b = (byte) 0xAD;
byte r = (byte) ( a ^ b);
Upvotes: 5
Reputation: 1056
This was somewhere down in the answers to one of the similar questions that people have already pointed out:
http://blogs.msdn.com/oldnewthing/archive/2004/03/10/87247.aspx
Upvotes: 0
Reputation: 346327
Because the language spec says so. It gives no reason, but I suspect that these are the most likely intentions:
Upvotes: 20
Reputation: 24577
There is no Java bitwise operations on two bytes. Your code implicitly and silently converts those bytes to a larger integer type (int
), and the result is of that type as well.
You may now question the sanity of leaving bitwise operations on bytes undefined.
Upvotes: 2