I was going through a piece of code in the Apache commons library and was wondering what these conditions do exactly.
public static byte[] decodeHex(final char[
This checks if the last digit in the binary writing of len
is a 1
.
xxxxxxxy
& 00000001
gives 1
if y
is 1
, 0
if y
is 0
, ignoring the other digits.
If y
is 1
, the length of the char array is odd, which shouldn't happen in this hex writing, hence the exception.
Another solution would have been
if (len%2 != 0) {
which would have been clearer in my opinion. I doubt the slight performance increase just before a loop really matters.
It's a 1337 (high performance) way of coding:
if (len % 2 == 1)
i.e. is len
odd. It works because the binary representation of every odd integer has its least significant (ie last) bit set. Performaning a bitwise AND
with 1
masks all other bits, leaving a result of either 1
if it's odd or 0
if even.
It's a carryover from C, where you can code simply:
if (len & 1)
This line checks if len is an odd number or not. If len isn't odd, len & 1 will be equal to 0. (1 and 0x01 are the same value, 0x01 is just the hexadecimal notation)