candy - It wouldn't even help if you could! You have to understand two's complement, and if you do you won't need to calculate big old binary numbers.

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

Joined: Mar 08, 2004
Posts: 322

posted

0

Hi Bert 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.Plz clarify. Also is there any formula for >>> operator. Thanks candy

kundan varma
Ranch Hand

Joined: Mar 08, 2004
Posts: 322

posted

0

HI Bert If you can throw some light on this, then i will be highly obliged. Waiting for ur reply THanks candy

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.

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.

kundan varma
Ranch Hand

Joined: Mar 08, 2004
Posts: 322

posted

0

THanks Lasse and bert for your inputs. I will sit in this month end for the exam. THanks again candy

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 )

Hello Jeroen, I am looking at your shift operation example. Do you have the results flipped? Should the results be: -1 >> 1 == 10000001 >> 1 == 11000000 -1 >>> 1 == 10000001 >>> 1 == 01000000 Cheers, Lawrence