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?

pascalhein
  • 5,700
  • 4
  • 31
  • 44
Johnny Chen
  • 2,025
  • 1
  • 18
  • 27

4 Answers4

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
Armen Tsirunyan
  • 130,161
  • 59
  • 324
  • 434
2

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

0x1001 != 0x01
gefei
  • 18,922
  • 9
  • 50
  • 67
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.

Luchian Grigore
  • 253,575
  • 64
  • 457
  • 625
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.

Adam Stelmaszczyk
  • 19,665
  • 4
  • 70
  • 110