• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

number converstion between(decimal, octal, Hex)

 
Ranch Hand
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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?
 
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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.
 
Ranch Hand
Posts: 178
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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 ]
 
Author & Gold Digger
Posts: 7617
6
IntelliJ IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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 ]
 
Greenhorn
Posts: 22
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

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.
 
Ranch Hand
Posts: 3271
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
 
Valentin Crettaz
Author & Gold Digger
Posts: 7617
6
IntelliJ IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thank you Peter, yes it was a typo, actually 2 typos . I've corrected them. Thank you again.
 
Rajinder Yadav
Ranch Hand
Posts: 178
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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?
 
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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.
 
Shabbir Rahman
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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
Posts: 71
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Cool.. I got it!
Thanks for your help.
 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic