5

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?

0

4 Answers 4

13

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
Sign up to request clarification or add additional context in comments.

3 Comments

@Johnny: E.g., all odd numbers match the & 0x01 test, but only 0x01 matches the == 0x01 test.
It seems that all odd numbers will return true here.
@JohnnyChen: Do I hear an echo? ;-)
2

(0x1001 & 0x01) == 0x01, but

0x1001 != 0x01

Comments

2

No, it doesn't, the first will check only the last bit - if it's 1, it will return true regardless of the others.

The second one will return true if only the last bit is 1.

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.