What’s the use of “& 0xff” in programming?

by Oscar

When I strated out, I was really confused about bit shift and hexadecimal number and binary. This is a good example how confusing it could get sometimes. Occasionally you see this in the code, for exmaple in C++:

Some of the links on this page are affiliate links. I receive a commission (at no extra cost to you) if you make a purchase after clicking on one of these affiliate links. This helps support the free content for the community on this website. Please read our Affiliate Link Policy for more information.

byte a = ( b >>  8) & 0xff; // b is an integer

Okay, I know what “>> 8” means, we are shifting variable “b” to the right by 8 bits. But, what the heck is “& 0xff” doing there?

Well, 0xff is the hexadecimal number FF which has a integer value of 255. And the binary representation of FF is 00000000000000000000000011111111 (under the 32-bit integer).

The & operator performs a bitwise AND operation. a & b will give you an integer with a bit pattern that has a 0 in all positions where b has a 0, while in all positions where b has a 1, the corresponding bit value froma is used (this also goes the other way around). For example, the bitwise AND of 10110111 and00001101 is 00000101.

In a nutshell, “& 0xff” effectively masks the variable so it leaves only the value in the last 8 bits, and ignores all the rest of the bits.

It’s seen most in cases like when trying to transform color values from a special format to standard RGB values (which is 8 bits long).

Leave a Comment

By using this form, you agree with the storage and handling of your data by this website. Note that all comments are held for moderation before appearing.

6 comments

Shayan 14th April 2018 - 11:51 pm

I was confused about 0xff. this article helped me alot. thanks for sharing.

Reply
Hoswar Ruby 5th January 2017 - 5:01 am

i think , it’s really wierd …

Reply
Muslim Aswaja 15th March 2016 - 3:58 pm

Thank you, Oscar! It’s really helpfull for me.
:-)

Reply
Simon 18th November 2015 - 9:39 pm

Hi Oscar,

Thanks for your knowledge, it is really helpful to me!

Reply
Abder-Rahman 23rd August 2015 - 5:59 pm

Thanks for the nice tutorial!

Reply
bit_shift 2nd December 2014 - 9:47 pm

Forgive me, but isn’t it >> a right shift, because you know it point right and move the bits to the right, and << is the left shift?

Reply