Toon posts:

[vb] newbie: conversie van decimaal (met komma) naar binair

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben volledige newbie, ik gebruik vb/c++ enzo enkel voor kleine zaken want ik ben eigenlijk elektronica ingenieur ... maar ik heb een hele hoop coefficienten in excell staan die ik graag had omgezet naar binaire of hexadecimale getallen (en deze getallen zijn tussen de 0 en de 2 met 6 cijfers na de komma) dus dacht ik ik ga visual basic gebruiken. maar ik vind in msdn niet direct een manier om die fracties om te zetten naar binaire (komt nogal onoverzichtelijk over die msdn) en ik heb niet direct de tijd om er lang op te zoeken dus dacht ik, ik ga het eens vragen in GoT misschien dat die me snel kunnen helpen ....

alvast bedankt...

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Hoe bedoel je, in hexadecimaal of binair formaat? Wil je het formaat hebben zoals deze getallen intern in het geheugen staan opgeslagen? Zo ja, google eens op "ieee floating point format":
http://www.google.nl/sear...oating+point+format&meta=

Van C / C++ zou ik wel weten hoe je makkelijk zo'n representatie kunt uitlezen:
C++:
1
2
float fGetal;
unsigned char *pBytes = (unsigned char *)&fGetal;  //pBytes[0] tm pBytes[3] is binaire representatie.


Voor VB weet ik niet of er een soortgelijke truc bestaat.

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 08-04 20:02

4VAlien

Intarweb!

achter de komma converteren is vrij simpel, bit positie X is 2^-X. Dus de eerste decimaal is 0 of 0,5 de tweede 0 of 0,25.

pseudocode:
code:
1
2
3
4
5
6
7
8
9
fractie = 0.523935
resultstring = ""

for i = 1 to N
if pow(2,-i) > fractie then resultstring = resultstring + "0"
else 
    resultstring = resultstring + "1"
    fractie = fractie - pow(2,-i)
end if


Wat doet het? Het kijkt of de waarde van de huidige decimaal groter of kleiner is dan de rest fractie. Als de huidige decimaal een kleinere waarde heeft wordt deze toegevoegd en dit getal van de fractie afgehaald. Als de huidige decimaal groter is moet het uiteraard een 0 worden, N geeft je precisie aan.

edit: Voor hexadecimaal is het niet veel moeilijker, alleen heb je dan binnen de 1..N lus nog een lus van 15 naar 0 zodat je de hoogst mogelijke waarde kiest voor de hexadecimale decimaal.

[ Voor 16% gewijzigd door 4VAlien op 29-03-2005 01:57 ]