Win a copy of The Little Book of Impediments (e-book only) this week in the Agile and Other Processes forum!

# Diifference in Bitwise Operators

Vishnu Sharma
Ranch Hand
Posts: 55
What is the basic difference in >> and >>>?? I got that >> is for signed & >>> for unsigned. But what i did not get is, in >> sign get copied & in >>> no sign get copied.
What exactly it means by Sign get copied.

Jesper de Jong
Java Cowboy
Saloon Keeper
Posts: 15632
46
Integers are stored in two's complement format in Java (as in almost every other programming language). The leftmost bit of an int is the sign bit - if it's set, the number is negative, if it's cleared, the number is positive.

The >> operator shifts all the bits of the operand to the right and fills in the new bits on the left by copying the sign bit of the operand.

The >>> operator shifts all the bits of the operand to the right and sets the new bits on the left to zero.

For example: Suppose you have the number 11000101.

11000101 >> 2 = 11110001 note that the leftmost bits are set to 1

11000101 >>> 2 = 00110001 note that the leftmost bits are set to 0

Vishnu Sharma
Ranch Hand
Posts: 55
Jesper Young wrote:Integers are stored in two's complement format in Java (as in almost every other programming language). The leftmost bit of an int is the sign bit - if it's set, the number is negative, if it's cleared, the number is positive.

The >> operator shifts all the bits of the operand to the right and fills in the new bits on the left by copying the sign bit of the operand.

The >>> operator shifts all the bits of the operand to the right and sets the new bits on the left to zero.

For example: Suppose you have the number 11000101.

11000101 >> 2 = 11110001 note that the leftmost bits are set to 1

11000101 >>> 2 = 00110001 note that the leftmost bits are set to 0

Ohk. Please correct me if i am wrong. by the example i understood as, we will delete the two right bits & shift all remaining towards right & for deleting two bits, we will be adding two 1s in case of >> and two 0s in case of >>> to the left most side.

Henry Wong
author
Marshal
Posts: 22111
88
Vishnu Sharma wrote:
Ohk. Please correct me if i am wrong. by the example i understood as, we will delete the two right bits & shift all remaining towards right & for deleting two bits, we will be adding two 1s in case of >> and two 0s in case of >>> to the left most side.

Almost.... Given this...

X0101010 where X could be either 1 or 0.

X0101010 >> 2 will yield XXX01010

and

X0101010 >>>2 will yield 00X01010

So, if X is zero, the two expressions will yield the same result (ie. >> doesn't always add 1's on the left).

Henry

Campbell Ritchie
Sheriff
Posts: 51394
87
I wrote about that a long time ago: here.

Janeice DelVecchio
Saloon Keeper
Posts: 1809
12
Awesome thread... I just bookmarked it