Mohnish Khiani

Ranch Hand

Posts: 65

posted 6 years ago

To find out what the output of this is, you can ofcourse simply try it out.

A byte is an 8-bit signed integer. In the first line, you're setting the bits to 0xf1 (or 1111 0001 in binary).

In line 2 you're first shifting this to the right by 4 bits. When you shift a byte to the right, all the bits go right one place, the~~left~~ rightmost bit will be discarded and the ~~right~~ leftmost bit will be copied from what was previously the ~~right~~ leftmost bit. So:

[1] 1111 0001 >> 1 = 1111 1000

[2] 1111 1000 >> 1 = 1111 1100

[3] 1111 1100 >> 1 = 1111 1110

[4] 1111 1110 >> 1 = 1111 1111

The result after >> 4 is: 1111 1111

Then you do a bitwise AND with 0x0f (or 0000 1111 in binary).

1111 1111 & 0000 1111 = 0000 1111

So the result is 0000 1111, which is 0x0f in hexadecimal or 15 in decimal.

A byte is an 8-bit signed integer. In the first line, you're setting the bits to 0xf1 (or 1111 0001 in binary).

In line 2 you're first shifting this to the right by 4 bits. When you shift a byte to the right, all the bits go right one place, the

[1] 1111 0001 >> 1 = 1111 1000

[2] 1111 1000 >> 1 = 1111 1100

[3] 1111 1100 >> 1 = 1111 1110

[4] 1111 1110 >> 1 = 1111 1111

The result after >> 4 is: 1111 1111

Then you do a bitwise AND with 0x0f (or 0000 1111 in binary).

1111 1111 & 0000 1111 = 0000 1111

So the result is 0000 1111, which is 0x0f in hexadecimal or 15 in decimal.

Campbell Ritchie

Sheriff

Posts: 55329

157