Acties:
  • 0 Henk 'm!

  • rettes
  • Registratie: Januari 2016
  • Laatst online: 11-03-2023
Hallo mede-Tweakers,

Ik heb een vraagje. in de onderstaande code zijn we bezig met het converten van decimale getallen naar binaire getallen en vice versa. Ons probleem is, is dat wanneer wij een hoger decimaal getal dan 1023 invoeren dat het programma er geen binair getal van maakt. Is iemand die mij hier mee kan helpen?

MVG,

Roan
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int decbin(int dec) {
    {
        int binaryNumber = 0;
        int rest, i = 1, step = 1;

        while (dec != 0)
        {
            rest = dec % 2;
            dec /= 2;
            binaryNumber += rest*i;
            i *= 10;
        }
        return binaryNumber;
    }
}

[ Voor 45% gewijzigd door Creepy op 22-11-2017 12:14 ]


Acties:
  • +1 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09:18

Creepy

Tactical Espionage Splatterer

(jarig!)
Ga eens na hoeveel bits je nodig hebt voor 1024 of groter en hoeveel bits kan je kwijt in een int (want dat geeft decbin terug)?

Ik heb daarnaast je post voorzien van code tags en ingekort tot alleen de relevante code. Wil je hier in de toekomst zelf op letten?

[ Voor 34% gewijzigd door Creepy op 22-11-2017 12:15 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Creepy schreef op woensdag 22 november 2017 @ 12:13:
Ga eens na hoeveel bits je nodig hebt voor 1024 of groter en hoeveel bits kan je kwijt in een int (want dat geeft decbin terug)?
...en kijk dan eens specifiek naar wat i doet...

[ Voor 48% gewijzigd door RobIII op 22-11-2017 13:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 00:05
Ik heb het lichte gevoel dat je een nogal ongebruikelijke definitie van "decimale" en "binaire" getallen gebruikt. C++ gebruikt intern altijd binaire getallen. Dat is omdat computers zo werken. Je ziet het ook aan het feit dat ` x << 1` dezelfde operatie is als `x * 2`.

Maar jij gebruikt dus `/2` op je "decimale" input, en `*10` op je "binaire" output. 8)7

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Verwijderd

Je stelt geen binair nummer samen maar een int met alleen 1 en 0 erin.
100 als int = 100
100 binair = 4

Als je alleen een binaire weergave wil tonen kun je dat beter met een string doen waar je telkens een '0' of een '1' voor plakt (oftewel de stringwaarde van 'rest')

Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 10-09 19:15
Je loopt inderdaad uit de range van int.

Waarom zet je hem niet om in een string? Met itoa is dat peanuts.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat in vrijwel alle antwoorden hierboven duidelijk wordt en wat ik nog even onderstreep is dat je het idee dat "decimaal" of "binair" een representatie van een waarde is, net als octaal of hexadecimaal of tekstueel. De waarde verandert niet, maar de manier waarop je het weergeeft. Een getal op zichzelf is dus niet decimaal of binair, maar de weergave ervan kan wel verschillen. De vraag is dus niet hoe je een decimaal getal omzet in een binair getal, want dat is onzin. De vraag is hoe je een getal weergeeft in een binaire representatie, ofwel "formatteert" als een reeks enen en nullen.

Je hebt dus geen nieuw getal nodig, je hebt "iets" nodig om de presentatie voor je te regelen.

C++:
1
2
3
4
unsigned int i = 17; // decimaal
i = 0x11; // hexadecimaal
i = 021; // octaal
i = 0b10001; // binair; even aangenomen dat je compiler dit ondersteunt

Dit zijn allemaal verschillende verschillende manieren om hetzelfde getal weer te geven in code. Er vindt dus compile-time een conversie plaats (of beter gezegd: een interpretatie) van het format dat je gekozen hebt om het in op te schrijven. Echter: als je in het geheugen kijkt is het allemaal hetzelfde getal.

Andersom geldt dus ook: als je het weer wilt geven verander je niet de waarde van het getal maar ga je een representatie maken van het getal dat in je geheugen staat. Meestal zul je, zodra het over weergave gaat, een formatting doen die een string oplevert. In C zou je dat bijvoorbeeld met `sprintf` kunnen doen. Wat de C++ way-to-go is weet ik niet uit mijn hoofd, maar daar is ongetwijfeld iets anders voor bedacht.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1