Win a copy of Design for the Mind this week in the Design forum!

# Bitwise

shiva rao
Ranch Hand
Posts: 31
public class Test {

public Test () {
System.out.println("Inside the contructor");
return ;
}

public String Test () {
System.out.println("Inside the Method");
return "Welcome";
}

public static void main(String[] args) throws Exception {
int i=-10;
i=i>>2;
System.out.println("-10>>2 = "+i);
}
}

Output of this is -10>>2 = -3
Intially I thought it was -10>>2 = -2. Can somebody explain this in detail.

Thanks
shiva rao

soumya ravindranath
Ranch Hand
Posts: 300
Hi,

this topic has been discussed many times, please use the search facility on top, you will get about 200 hits easily !

Soumya.

sweety do
Greenhorn
Posts: 14
Hi Shiva,
i = -10 is a negative number..so take 2's complement of the number..
that is 2's complement of all the 32 bits of 10 (0000....1010)...the 2'complement is (1111....0101)
Now right shift it 2 times..Make a note that this is signed right shift..
so the value will be(1111....1101),now to get the exact value of this negative number..do 2'complement again..
so you are left with (0000...0011)..since it is a negative number add a -before 3..
Hope it helps,
sweety

amit taneja
Ranch Hand
Posts: 813
i = -10 is a negative number..so take 2's complement of the number..
that is 2's complement of all the 32 bits of 10 (0000....1010)...the 2'complement is (1111....0101)

How ?

when i m doing 2 complement ( i.e reversing bits and adding 1)
i m getting 1111....1110
by reversing bits of 10 (0000....1010) ->11111...0101 adding 1 ->1111..1110

? confused ...help pls

sweety do
Greenhorn
Posts: 14
hey amit,
here adding 1 means using OR operation..hence OR operation for 0101 +1
is

0101
+ 0001
_____________________
0101

1+1 does not give a carry 1 into next bit
hope this helps,
sweety

amit taneja
Ranch Hand
Posts: 813
Originally posted by sweety do:
hey amit,
here adding 1 means using OR operation..hence OR operation for 0101 +1
is

0101
+ 0001
_____________________
0101

1+1 does not give a carry 1 into next bit
hope this helps,
sweety

is it really true..? but in course i have done adding like
1+1=10 and 1 is shifted to next bit...
pls give me link to make sure of this..

really confused

so give final clarification...( i m genuinely confused)

Henry Wong
author
Marshal
Posts: 20989
76
i = -10 is a negative number..so take 2's complement of the number..
that is 2's complement of all the 32 bits of 10 (0000....1010)...the 2'complement is (1111....0101)

How ?

The two's complement is negate plus one so... it should be (1111....0110).

Henry

amit taneja
Ranch Hand
Posts: 813
thanx henry

u removed my confusion

all clear.... sweety ..pls look at complement and see how it works so u will not do mistake while calculating...
in above post u confused me..u didn't add 1

any way.. take care

Srinivasa Raghavan
Ranch Hand
Posts: 1228
Decimal -10 expressed in 32 bit binary is as follows
0000 0000 0000 0000 0000 0000 0000 1010
1's compliment of above number
1111 1111 1111 1111 1111 1111 1111 0101
Add 1 to get 2's compliment
1111 1111 1111 1111 1111 1111 1111 0101
1
=========================================
1111 1111 1111 1111 1111 1111 1111 0110
=========================================
(1)111 1111 1111 1111 1111 1111 1111 0110
Now we need to convert 111 1111 1111 1111 1111 1111 1111 0110
to decimal right ? so how will we get 3 after shifting.
[ June 10, 2005: Message edited by: Srinivasa Raghavan ]

Henry Wong
author
Marshal
Posts: 20989
76
(1)111 1111 1111 1111 1111 1111 1111 0110
Now we need to convert 111 1111 1111 1111 1111 1111 1111 0110
to decimal right ? so how will we get 3 after shifting.

The original question stated that if you shift right by 2, you will get -3 ... well, let's see...

Shift right by two, and you'll get:

1111 1111 1111 1111 1111 1111 1111 1101

Believe it or not, this is -3. There are two ways to confirm it. First, if you add 3, it should roll over and you'll end up with zero. The other way is to take a two's complement, and you'll get +3 as the result.

Henry

Piyush Sam
Greenhorn
Posts: 24
Computation of expression n>>s

For nonnegative values of n, this is equivalent to truncating integer division, as computed by the integer division operator /, by two to the power s,

and for negative values of n, this is equivalent to truncating integer division, as computed by the integer division operator /, by two to the power s and -1,

for example -10>>2 = -3 is compuatated as [ (-10 / (2 * 2) ) - 1 ] = -3
and 10>>2 = 2 is computated as [ 10 / (2 * 2) ] = 2

Regards,

sweety do
Greenhorn
Posts: 14
hi amit,
In java there are four bitwise operators.They are
Bitwise NOT,
Bitwise AND,
Bitwise OR,
Bitwise XOR.

The operations u do on bitwise operands must fall in one of the above 4 ..I donot know how adding two 1's can give u a carry on to next bit..because there is no operations that says so..it is not arithematic operation..

Clear this ambuguity..

sweety

Timmy Marks
Ranch Hand
Posts: 226
actually, the operation is called addition. Addition works with bits exactly as it does in base 10, but you carry when the sum is 2 or greater instead of 10 or greater!

amit taneja
Ranch Hand
Posts: 813
hi sweety..
hope u good...

add two bits like 1+1 will give you 2 which is 10 in binary so 1 is carried to next bit as in base 10

have u read my pvt msg yet i send to u sweety ?

sweety do
Greenhorn
Posts: 14
hi timmy,
i am not clear with one thing ::what does adding
0011
0101
0001
0111

gives??
what is the result..
sweety

Ranch Hand
Posts: 59
The two's complement is negate plus one so... it should be (1111....0110).

How??

shiva rao
Ranch Hand
Posts: 31
Hi All,

Correct me if I am wrong.
Decimal -10 expressed in 32 bit binary is as follows
0000 0000 0000 0000 0000 0000 0000 1010
1's compliment of above number
1111 1111 1111 1111 1111 1111 1111 0101
Add 1 to get 2's compliment
1111 1111 1111 1111 1111 1111 1111 0101
1
=========================================
1111 1111 1111 1111 1111 1111 1111 0110
=========================================
Not shift right by two points, we will get.
111111 1111 1111 1111 1111 1111 1111 01
Now if I repeat the above process as 1's compliment and adding 1 (which is 2' compliment again).
which is like
0000 0000 0000 0000 0000 0000 0000 0010
which result as
0000 0000 0000 0000 0000 0000 0000 0011
I am getting 3. But I still don't get -3

Thanks!
shiva rao
[ June 13, 2005: Message edited by: shiva rao ]

Steven Bell
Ranch Hand
Posts: 1071
Originally posted by sweety do:

i am not clear with one thing ::what does adding
0011
0101
0001
0111

0011 + 0101 = 1000
1000 + 0001 = 1001
1001 + 0111 = 1 0000

Just to clarify the carry question

0001 + 0001 = 0010

The same as
0009 + 0001 = 0010
in decimal

Steven Bell
Ranch Hand
Posts: 1071
Originally posted by shiva rao:
Hi All,
I am getting 3. But I still don't get -1

Thanks!
shiva rao

Why would you get -1?

shiva rao
Ranch Hand
Posts: 31
Originally posted by Steven Bell:

Why would you get -1?

Sorry its a typo error. I am getting 3. I am not getting -3

Thanks!!
Shiva rao

Bert Bates
author
Sheriff
Posts: 8898
5
Ah well,

Late to the party again! Just an FYI for those of you studying for the Tiger version of the SCJP...

There are NO bit-twiddling questions on the new exam!!! If you're studying for 1.5 - skip this whole thread and topic!!

Yeah!

For those of you studying for 1.4... carry on.

Bert

Jay Pawar
Ranch Hand
Posts: 411

Hope that helps

Ranch Hand
Posts: 59
Thanks Jay,
U helpd me to remove my confusion.

hi shiva ,
see
the Q is -10>>2=?

In binary 10 is represented as;
0000 0000.......0000 1010

Now do 2's complement

0000 0000.......0000 1010
+ ^1 (^ start inverting)
--------------------------------------
1111 1111 ......1111 0110 (-10 in decimal)

shift to right by 2.

this will give;
1111 1111.......1111 1101
(This is actually no. -3 in the binary form)

Once again do 2's complement ;

1111 1111.........1111 1101
+ ^1
-------------------------------------
0000 0000.........0000 0011 (3 in decimal)

means the ans is -3.

Am i right friends?

sweety do
Greenhorn
Posts: 14
hi Steven,
thank you..i am more clear now...
sweety

shiva rao
Ranch Hand
Posts: 31
Thanks Jay,
U helpd me to remove my confusion.

hi shiva ,
see
the Q is -10>>2=?

In binary 10 is represented as;
0000 0000.......0000 1010

Now do 2's complement

0000 0000.......0000 1010
+ ^1 (^ start inverting)
--------------------------------------
1111 1111 ......1111 0110 (-10 in decimal)

shift to right by 2.

this will give;
1111 1111.......1111 1101
(This is actually no. -3 in the binary form)

Once again do 2's complement ;

1111 1111.........1111 1101
+ ^1
-------------------------------------
0000 0000.........0000 0011 (3 in decimal)

means the ans is -3.

Am i right friends?

Sounds good to me.
Only bothering thing is applying 2's complement second time to see the actual number. Otherwise its hard to identify the number after shift.

Bert Bates
author
Sheriff
Posts: 8898
5
So I'm curious...

Are you guys all studying for the 1.4 exam?

Why not the 1.5?