Domanda

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?

È stato utile?

Soluzione

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

Altri suggerimenti

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

0x1001 != 0x01

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.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top