Win a copy of Think Java: How to Think Like a Computer Scientist this week in the Java in General forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

How to convert a Negative Binary Number to Decimal

 
Muhammad sibtain
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am not able to convert a binary number to decimal by applying the same technique that we normally use to convert a positive binary e.g.
if i want to convert 00000111 the i can convert it by this
(0*2^7)+(0*2^6)+(0*2^5)+(0*2^4)+(0*2^3)+(1*2^2)+(1*2^1)+(1*2^0)
0 + 0 + 0 + 0 + 0 +( 1*4 )+( 1*2 )+( 1*1 )
0 + 0 + 0 + 0 + 0 + 4 + 2 + 1
the total of these = 7
00000111 = 7

and
11111000 = -7
if i use the same rule it is giving some thing else in decimal
Please help me to do so
Regards
Sibtain
 
David O'Meara
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The short answer is that we use 2s Complement representation for storing numbers, this allows us to store both positive and negative numbers.
For more info, see the relevant story from the Javaranch campsite
(do a search for "SIGNED" to find the specific bit)
Dave.
 
Muhammad sibtain
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks for your quick response David but, My problem is not this that how java put a negative number in memory i now it perform 2s complement and then place it in memory. My problem is this if i wannt to convert that negative binaray number manually what formula should i apply for it??
Regards
Sibtain
 
Peter Kristensson
Ranch Hand
Posts: 118
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
There's a thread on this in the java in general forum, hope it helps
http://www.javaranch.com/ubb/Forum33/HTML/003252.html
/Peter
 
John Lee
Ranch Hand
Posts: 2545
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Change negative into absolute value:
Two steps:
1) Deduct 1 form original binary;
2) Switch all byte of binary number;
Now you get the absolute value of the nagative. Follow normal procedure.
 
Anonymous
Ranch Hand
Posts: 18944
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Muhammad sibtain:
I am not able to convert a binary number to decimal by applying the same technique that we normally use to convert a positive binary e.g.
if i want to convert 00000111 the i can convert it by this
(0*2^7)+(0*2^6)+(0*2^5)+(0*2^4)+(0*2^3)+(1*2^2)+(1*2^1)+(1*2^0)
0 + 0 + 0 + 0 + 0 +( 1*4 )+( 1*2 )+( 1*1 )
0 + 0 + 0 + 0 + 0 + 4 + 2 + 1
the total of these = 7
00000111 = 7

and
11111000 = -7
if i use the same rule it is giving some thing else in decimal

11111000 would equal -7 in a one-complement binary notation. In two-complement notation (which is a bit more popular) -7 would be represented by 1111001. Here goes; assume we're talking 8 bits in total where the leftmost bit is the sign bit. Jot down the following numbers, from left to right: 128, 64, 32, 16, 8, 4, 2, 1.
For any positive number (the leftmost bit is 0), say, 00000111, take the corresponding numbers you've just jotted down, where a bit equals 1, so here you get 4, 2, 1. Add these numbers: 4+2+1= 7.
Now for a negative number (the leftmost bit equals 1), say, 11111001, take the corresponding numbers you've just jotted down, where a bit equals 0, here you get 4, 2. Add these numbers: 4+2=6 and add one (that's the two-complement trick), so the result equals 7, but the number is negative, so the final result equals -7.
For one-complement representation, the 'add one to the result' step can be omitted.
kind regards,
Jos
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic