Operator "<<= " : What does it it mean?

I need help solving this problem in my mind, so if anyone had a similar problem it would help me.

Here’s my code:

char c=0xAB;
printf("01:%x\n", c<<2);
printf("02:%x\n", c<<=2);
printf("03:%x\n", c<<=2);

Why the program prints:

01:fffffeac
02:ffffffac
03:ffffffb0

What I expected to print, that is, what I got on paper is:

01:fffffeac
02:fffffeac
03:fffffab0

I obviously realized I didn’t know what the operator <<= was doing, I thought c = c << 2.

If anyone can clarify this, I would be grateful.

>Solution :

You’re correct in thinking that

c <<= 2

is equivalent to

c = c << 2

But you have to remember that c is a single byte (on almost all systems), it can only contain eight bits, while a value like 0xeac requires 12 bits.

When the value 0xeac is assigned back to c then the value will be truncated and the top bits will simply be ignored, leaving you with 0xac (which when promoted to an int becomes 0xffffffac).

Leave a Reply