kundan varma

Ranch Hand

Posts: 323

Bert Bates

author

Sheriff

Sheriff

Posts: 8945

17

kundan varma

Ranch Hand

Posts: 323

kundan varma

Ranch Hand

Posts: 323

Lasse Koskela

author

Sheriff

Sheriff

Posts: 11962

5

posted 13 years ago

I'm not sure about which formula are we talking about, but here's an explanation:

2 in decimal is 00000010 in binary

Each >> shift "moves" the bits to the right, which leads to

"2 >> 1" = 0000001

"2 >> 2" = 0000000

"2 >> 3" = 0000000

"2 >> 4" = 0000000

etc.

The ">>>" operator works the same way except that when the most significant (sign) bit is moved to the right, the "vacant slots" are filled with zeroes. With ">>" those vacant slots are filled with whatever the sign bit was.

Originally posted by candy varma:

In ur operator and assignment self test, u r saying 2>>5 is 0 but it should be 2/64=0.03125 as per ur formula.

I'm not sure about which formula are we talking about, but here's an explanation:

2 in decimal is 00000010 in binary

Each >> shift "moves" the bits to the right, which leads to

"2 >> 1" = 0000001

"2 >> 2" = 0000000

"2 >> 3" = 0000000

"2 >> 4" = 0000000

etc.

The ">>>" operator works the same way except that when the most significant (sign) bit is moved to the right, the "vacant slots" are filled with zeroes. With ">>" those vacant slots are filled with whatever the sign bit was.

Author of Test Driven (2007) and Effective Unit Testing (2013) [Blog] [HowToAskQuestionsOnJavaRanch]

Bert Bates

author

Sheriff

Sheriff

Posts: 8945

17

posted 13 years ago

candy -

It seems to me Lasse's explanation is a great start - do you understand his answer? It seems that your formula for dividing by 2 to the N isn't really the best way to think about this topic - you really have to look at the binary.

It seems to me Lasse's explanation is a great start - do you understand his answer? It seems that your formula for dividing by 2 to the N isn't really the best way to think about this topic - you really have to look at the binary.

Spot false dilemmas now, ask me how!

(If you're not on the edge, you're taking up too much room.)

kundan varma

Ranch Hand

Posts: 323

Jeroen Wenting

Ranch Hand

Posts: 5093

posted 13 years ago

bit shifting operations are integer operations, not floating point.

Therefore if you take a floating point division to determine the answer you will need to take into consideration as the result ONLY the integer part of the resulting floating point number.

And even then you have to consider that the result is invalid when you're doing a bitshift operation on a negative number.

Examples (using 8 bit ints for brevity).

-1 >> 1 == 10000001 >> 1 == 01000000

-1 >>> 1 == 10000001 >>> 1 == 11000000

Neither of which is equal to -1/2 == -0.5 (the int part of which is -0 )

Originally posted by Bert Bates:

candy -

It seems to me Lasse's explanation is a great start - do you understand his answer? It seems that your formula for dividing by 2 to the N isn't really the best way to think about this topic - you really have to look at the binary.

bit shifting operations are integer operations, not floating point.

Therefore if you take a floating point division to determine the answer you will need to take into consideration as the result ONLY the integer part of the resulting floating point number.

And even then you have to consider that the result is invalid when you're doing a bitshift operation on a negative number.

Examples (using 8 bit ints for brevity).

-1 >> 1 == 10000001 >> 1 == 01000000

-1 >>> 1 == 10000001 >>> 1 == 11000000

Neither of which is equal to -1/2 == -0.5 (the int part of which is -0 )

42

Don't get me started about those stupid light bulbs. |