Win a copy of Securing DevOps this week in the Security forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
Sheriffs:
Saloon Keepers:
Bartenders:

# Diifference in Bitwise Operators

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.

Java Cowboy
Sheriff
Posts: 16081
88
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.

author
Sheriff
Posts: 23387
138

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

Sheriff
Posts: 57882
178
I wrote about that a long time ago: here.

Bartender
Posts: 1812
12
Awesome thread... I just bookmarked it