Decoding Hex: What does this line do (len & 0x01) != 0

后端 未结 3 1637
北海茫月
北海茫月 2021-01-25 21:33

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[         


        
相关标签:
3条回答
  • 2021-01-25 21:57

    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.

    0 讨论(0)
  • 2021-01-25 21:59

    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)
    
    0 讨论(0)
  • 2021-01-25 22:02

    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)

    0 讨论(0)
提交回复
热议问题