How to convert real to binary
-
I know basic numbers conversion..but what about this number -16.735.. how to convert this real to binary? first 8 bits if i am right are 0001000 than how continue conversion for 0.735?? Can i use c++ as help?
You need to do a bit or research. How you convert it depends on what you want to do with the end result. You can have fixed point binary fractions... So, first bunch of bits are the whole number, last bunch are (eg 8 bits) are 256ths. This is quite common in motor controllers, as it makes their fractions into slightly hard integers. Or you can have a moving "binary" point, so the fraction is represented as: 1.xxxxx * 2^yyyy. The 1. is not needed to be stored, as it always exists. How many bits you put to xxx's and how many to yyy's is variable. These are called
mantissa
andexponent
, so have fun googling! Try this:float d = 1;
BYTE *by = (BYTE*)(&d);
d = 2;
d = 1.1;
d = 1.00001;Now look at the memory d is stored in (using your debugger) and see how it changes when you put these different numbers in. Short answer to your question: However you like! Iain.
I have now moved to Sweden for love (awwww). If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need contract work done, give me a job! http://cv.imcsoft.co.uk/[^]
-
I know basic numbers conversion..but what about this number -16.735.. how to convert this real to binary? first 8 bits if i am right are 0001000 than how continue conversion for 0.735?? Can i use c++ as help?
Aljaz111 wrote:
I know basic numbers conversion
There's no such thing as number conversion. What you are talking about is converting from one representation (decimal) to another representation (binary). The number itself remains the same. So, your question is not clear: do you have a float and would like to print it's binary representation ? Is that what you are trying to do ? Do you want to learn how floating points number are encoded in binary ? Please clarify your question.
Cédric Moonen Software developer
Charting control [v2.0] OpenGL game tutorial in C++ -
I know basic numbers conversion..but what about this number -16.735.. how to convert this real to binary? first 8 bits if i am right are 0001000 than how continue conversion for 0.735?? Can i use c++ as help?
Aljaz111 wrote:
first 8 bits if i am right are 0001000
Probably no. Usually the sign is the very first bit and usually it is
1
for negative numbers... :rolleyes: Anyway as Iain & Cédric pointed out, your question, as it stands, make no much sense. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
Aljaz111 wrote:
first 8 bits if i am right are 0001000
Probably no. Usually the sign is the very first bit and usually it is
1
for negative numbers... :rolleyes: Anyway as Iain & Cédric pointed out, your question, as it stands, make no much sense. :)If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles]I want to present -16,735 in binary...how should i do it? Lets say manually on list of paper? As i know it goes like this: 1.first you must put 16,735 in binary..you get 00010000 , ...? 2.than you put comma behind 1 and you get exponent 4 so 2^4. 3.next you must read manttis..but how could i read manttis if i don't know how is 735 represented with 1 and 0?? 4.we get exponent for 64-bit number 1024+4=1028(10) --> thats 0010 0000 0000 0100. 5. we change first bit to 1 and we get 1 0010 0000 0000 0100 ......? -->here same as in step 3. how to get binary from 0.735?? I hope i made myself clearly now. When i typed in online numbering calc real number 0735 it gave me this binary.. 10111100001010001111010111000010100011110101110000101 53 bits... too much as i think?
-
I want to present -16,735 in binary...how should i do it? Lets say manually on list of paper? As i know it goes like this: 1.first you must put 16,735 in binary..you get 00010000 , ...? 2.than you put comma behind 1 and you get exponent 4 so 2^4. 3.next you must read manttis..but how could i read manttis if i don't know how is 735 represented with 1 and 0?? 4.we get exponent for 64-bit number 1024+4=1028(10) --> thats 0010 0000 0000 0100. 5. we change first bit to 1 and we get 1 0010 0000 0000 0100 ......? -->here same as in step 3. how to get binary from 0.735?? I hope i made myself clearly now. When i typed in online numbering calc real number 0735 it gave me this binary.. 10111100001010001111010111000010100011110101110000101 53 bits... too much as i think?
Not being sure that I understand exactly. The floating point numbers are stored binary in memory already. Assuming the system is little-endian and the number is 64 bit real and also according to IEEE 754; double d = -16.735; char *p = (char *)&d; p[7] ... p[0] if you convert 8 hex. digits to ascii-binary, you' ll get binary representation of the number like below. 1100 .... 1100 if you want to, you can split it into parts. First bit is sign, next 11 are biased exponent, others are mantissa without first (set) bit. You can also unbias the exponent. If you put a 1 in front of the last 52 bits, you will get the same long string of binary digits in your post for 0.735 same as with online number calculator. As you may also want to know, there are also some functions (ANSI compatible, i think) in math library, (so <math.h> has to be included). frexp() function - To split FP number into human readable (10 based) mantissa and exponent parts. modf() function - To split it into fractional and integer parts.
-
I want to present -16,735 in binary...how should i do it? Lets say manually on list of paper? As i know it goes like this: 1.first you must put 16,735 in binary..you get 00010000 , ...? 2.than you put comma behind 1 and you get exponent 4 so 2^4. 3.next you must read manttis..but how could i read manttis if i don't know how is 735 represented with 1 and 0?? 4.we get exponent for 64-bit number 1024+4=1028(10) --> thats 0010 0000 0000 0100. 5. we change first bit to 1 and we get 1 0010 0000 0000 0100 ......? -->here same as in step 3. how to get binary from 0.735?? I hope i made myself clearly now. When i typed in online numbering calc real number 0735 it gave me this binary.. 10111100001010001111010111000010100011110101110000101 53 bits... too much as i think?
Hi, the easiest way probably is like this for converting val to (sign,exp,mant): 0. threat special values separately (mainly zero); for others do: 1. sign=0; 2. if (val<0) {sign=1; val=-val;} 3. exp=0; 4. while (val>=1) {exp++; val/=2;} 5. while (val<0.5) {exp--; val*=2;} 6. now val is in [0.5,1); we assume you want M bits for mantissa, then: 7. val*=1<Luc Pattyn
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
Local announcement (Antwerp region): Lange Wapper? Neen!
-
I want to present -16,735 in binary...how should i do it? Lets say manually on list of paper? As i know it goes like this: 1.first you must put 16,735 in binary..you get 00010000 , ...? 2.than you put comma behind 1 and you get exponent 4 so 2^4. 3.next you must read manttis..but how could i read manttis if i don't know how is 735 represented with 1 and 0?? 4.we get exponent for 64-bit number 1024+4=1028(10) --> thats 0010 0000 0000 0100. 5. we change first bit to 1 and we get 1 0010 0000 0000 0100 ......? -->here same as in step 3. how to get binary from 0.735?? I hope i made myself clearly now. When i typed in online numbering calc real number 0735 it gave me this binary.. 10111100001010001111010111000010100011110101110000101 53 bits... too much as i think?
Is it -16.735 or -16,735? -16.735 = -10000.1011110000101000111101011100001010001111010111 -16,735 = -100000101011111 The general procedure is to do integer and fraction part separately. For integer part N : 1. If N is not zero, divide N by 2 2. If remainder is 1 write down 1, if its 0 write down 0 3. N = N/2 - remainder. Go back to Step 1. Finally, write the 0 and 1 in reverse order. Example, N = 40 1. 40/2 = 20. Remainder = 0. Write 0 2. 20/2 = 10. Remainder = 0. Write 0 3. 10/2 = 5. Remainder = 0. Write 0 4. 5/2 = 2 + 1/2. Remainder = 1/2. Write 1 5. 2/2 = 1. Remainder = 0. Write 0 6. 1/2 = 0 + 1/2. Remainder = 1/2. Write 1 Threfore, 40 = 101000 For fraction part F, 1. If F is not zero, Multiply F by 2. 2. If result is greater than or equal to 1, write down 1. F = (F * 2) - 1 3. If result is not greater than 1, write down 1. F = (F * 2) 4. If F > 0 go back to step 1. Example, F = 0.25 1. 0.25 * 2 = 0.5. Write down 0 2. 0.5 * 2 = 1. Write down 1 Thus 0.25 = 0.01