aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes number converstion between(decimal, octal, Hex) Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "number converstion between(decimal, octal, Hex)" Watch "number converstion between(decimal, octal, Hex)" New topic
Author

number converstion between(decimal, octal, Hex)

Joe Man
Ranch Hand

Joined: Feb 17, 2002
Posts: 71
Are the any formula that i can use to convert between decimal, Octal and Hex numbers?
(e.g)if i have decimal 16, how would i know the Octal number is 20 and the Hex number is 10?


Sun Certified Web Component Developer for the J2EE Platform<br />Sun Certified Programmer for the Java 2 Platform
Malik Tahir
Greenhorn

Joined: Sep 29, 2001
Posts: 18
hi Joe,
it's very simple just divide ur number with 16 (if it is hex), with 8 (if it is oct). And get the remainder of it.
Example
n is ur number, n = 16
n/16 it will give u 1 and remainder will be 0 so the number is 10.
n/8 it will give u 2 and remainder of course will be 0 so the number would be 20.
I hope this will help u in understanding.
Rajinder Yadav
Ranch Hand

Joined: Jan 18, 2002
Posts: 178
Given a value 259, here are the steps required to convert it to a hexadecimal value of 0x103?
Here is my steps (maybe someone has something better)
Step 1: Take a given value and divide it by the radix value you want to convert it to, the radix for hex is base 16.
Step 2: Take the remainer from step 1 and multiply it by the radix, this will be your next right most digit.
Step 3: Take the integral (whole) value and do step 1 until no more intergral value is left.

Steps to convert 259 to hex value
a. 259 / 16 = 16.1875
remainer is 0.1875 for step b
integral is 16 for step c
b. 1st right most digit = 16 * 0.1875 = 3
c. 16 / 16 = 1.0
remainer is 0 for step d
integral is 1 for step e
d. 2nd right most digit = 16 * 0 = 0
e. 3rd digit = 1
So 259 = 0x103
[ February 18, 2002: Message edited by: Rajinder Yadav ]

<a href="http://www.rajindery.com" target="_blank" rel="nofollow">Rajinder Yadav</a><p>Each problem that I solved became a rule which served afterwards to solve other problems. --Rene Descartes
Valentin Crettaz
Gold Digger
Sheriff

Joined: Aug 26, 2001
Posts: 7610
Rajinder,
this is a nice solution but allow me to doubt that during the exam one will be willing to perform all those computations. Moreover, your solution does not show how to manipulate bits and this is a very important topic for the purpose of the certification when dealing with shift operators and the like.
A much more elegant solution that all computer scientists, programmers and students should know at the very beginning is to be able to decompose any number in powers of 2. And from there on you can do everything.
I take 259 to show you how easy it is.
1. write the powers of two from the right to the left on a piece of paper, that is 2 power 0, 2 power 1, 2 power 2, and so on:
256 128 64 32 8 4 2 1
2. Decompose your number into those numbers, that is, try to find all powers of two that you can add together and get 259 (there is only one solution). You write a 1 under each number you choose and a 0 under each other number. Easy:
256 128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 1 1
That is 256+2+1 = 259.
100000011 is your binary representation of 259. From there on you can do two things, either convert to hexadecimal (radix 16) or to octal (radix 8).
3. If you want ot convert to hexadecimal, group your binary sequence by groups of 4 bits (because the biggest value a group of 4 bits can have is 15) beginning on the right side and pad the incomplete group on the left with 0's, like this:
0001 0000 0011
Then you just have to take one binary group after another and convert its value to hexadecimal (values range form 0 to F).
So we have 103 which we write 0x103 to signify that the number is in hexadecimal and that's it...
4. If you want ot convert to octal, group your binary sequence by groups of 3 bits (because the biggest value a group of 3 bits can have is 7) beginning on the right side and pad the incomplete group on the left with 0's, like this:
100 000 011
Then you just have to take one binary group after another and convert its value to its octal equivalent (values range from 0 to 7).
So we have 403 which we write 0403 to signify that the number is in octal and that's it...
So 259 in decimal is
- 100000011 in binary
- 0x103 in hexadecimal
- 0403 in octal
You must have noticed by now that the latter three are tightly coupled. Do learn this technique because it is very important to know it.
If you want more information, please read the following link Javaranch:Cat and Mouse Games with Bits or do a search in this forum.
[ February 18, 2002: Message edited by: Valentin Crettaz ]
[ February 18, 2002: Message edited by: Valentin Crettaz ]

SCJP 5, SCJD, SCBCD, SCWCD, SCDJWS, IBM XML
[Blog] [Blogroll] [My Reviews] My Linked In
Peter Bugla
Greenhorn

Joined: Feb 12, 2002
Posts: 22
Originally posted by Valentin Crettaz:
hex ... (because the biggest value a group of 4 bits can have is 16)

An F is 15 actually (8+4+2+1=15) hexadecimal range is [0-15], but I'm sure that was just a typo.
oct ... (because the biggest value a group of 3 bits can have is 8)

...weeeellllll, that's 7 than (4+2+1=7) octal range is [0-7].
Excellent explanation otherwise.


Peter Bugla<br />Sun Certified Programmer for Java 2 Platform
Corey McGlone
Ranch Hand

Joined: Dec 20, 2001
Posts: 3271
Another mathematical approach (which is much like Rajinder's although somewhat more straight-forward) you can use is to constantly divide the value you'd like to convert by your base (2 for binary, 8 for octal, 16 for hexadecimal, and so on) until the value reaches 0. When you're done, just look at the remainders and the converted number is laid out for you. Here, I convert 159 to binary:

Now, look back at the remainders and list them in reverse order that you obtained them, in this case:
10011111
This value is 159 in binary. You can then use Val's technique to quickly convert from binary to octal or hexadecimal. You can, however, use this technique to directly convert to octal or hexadecimal, if you'd like, by dividing by 8 or 16. For large numbers, however, I find it easier to convert to binary and then go from there because converting from binary to octal or hexadecimal is very quick and easy.
Corey


SCJP Tipline, etc.
Valentin Crettaz
Gold Digger
Sheriff

Joined: Aug 26, 2001
Posts: 7610
Thank you Peter, yes it was a typo, actually 2 typos . I've corrected them. Thank you again.
Rajinder Yadav
Ranch Hand

Joined: Jan 18, 2002
Posts: 178
Definitly using Corey divide by 2 and Valentin binary grouping seems to be the best way to decompose a number...thanks guys
Joe Man
Ranch Hand

Joined: Feb 17, 2002
Posts: 71
Thanks guys! I really appreciate your help..
Now i know how to convert from Decimal ->Octal -> Hex.
What if they give a Hex number and ask me to convert it to Oct or Dec? Can you show me how to do it the other way around?
Shabbir Rahman
Greenhorn

Joined: Feb 18, 2002
Posts: 18
Just make a chart like this
Hex-Binary
0-0000
1-0001
2-0010
.
.
9-1001
A-1010
B-1011
C-1100
D-1101
E-1110
F-1111
So, if you get the hex number 0xEF then the binary number is 1110 1111.
So the decimal value is 128+64+32+0+8+4+2+1=239
For octal chart is like this
Octal-Binary
0-000
1-001
2-010
.
.
.
7-111
So, if you get octal number 45 then the binary number is 100 101.
Decimal value is 32+0+0+4+0+1=37
I think it will help you.


-----------------<br />IBM XML Developer <br />SCJP 1.4
Shabbir Rahman
Greenhorn

Joined: Feb 18, 2002
Posts: 18
For Hex to octal convertion first convert it into binary then to octal like this.
Suppose you have 0xFE
Then binary is 1111 1110
If you split it by taking 3 bit in a group form right side then
011 111 110
3 7 6
So, the octal number is 376
From octal to hexadecimal conversion can be done in the similar way.
Joe Man
Ranch Hand

Joined: Feb 17, 2002
Posts: 71
Cool.. I got it!
Thanks for your help.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: number converstion between(decimal, octal, Hex)
 
Similar Threads
int
Integer literal printing options
Octal
octal/hexadecimal
decimal ->octal & decimal ->hexadecimal