I just read this code following:
byte[] bts = {8, 0, 0, 0};
if ((bts[i] & 0x01) == 0x01)
Does this do the same thing as
if (bts[i] == 0x01)
If not,what's the difference between them?
And what is the first way trying to do here?
No, it doesn't.
if(bts[i] == 0x01)
means if bts[i] is equal to 1.
if((bts[i] & 0x01) == 0x01)
means if the least significant bit of bts[i] is equal to 1.
Example.
bts[i] = 9 //1001 in binary
if(bts[i] == 0x01) //false
if((bts[i] & 0x01) == 0x01) //true
& 0x01 test, but only 0x01 matches the == 0x01 test.No, it's not the same thing. 0x01 is just 1. Now,
if (bts[i] == 0x01)
checks if bts[i] is equal to 1.
if ((bts[i] & 0x01) == 0x01)
Checks if the last (least significant) bit of bts[i] is equal to 1. In the binary system, all odd numbers have the last bit equal to 1. So, if ((bts[i] & 0x01) == 0x01) is basically checking, if the number in bts[i] is odd. It could be written as if (bts[i] % 2 == 1), too.