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

其他提示

(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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top