Binair Rekenen

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 122

Binair Rekenen

Hallo,

Ik heb twee vraagjes en hoop hier een antwoord te vinden.

Weet er iemand hoe je (101101,111)2 - (10010,1)2 oplost (liefst met het 2's-complement).

In welke gevallen moet je de uitkomst van een bewerking in het 2's-complement opnieuw terug omzetten?

Dank bij voorbaat,

Roger

Gebruikersavatar
Berichten: 5.609

Re: Binair Rekenen

Energyfellow schreef: ma 31 dec 2012, 13:32
Weet er iemand hoe je (101101,111)2 - (10010,1)2 oplost (liefst met het 2's-complement).
1) Evenveel getallen na de komma hebben door nullen toe te voegen

2) De komma weglaten

3) minteken vervangen door een plus teken en het tegengestelde nemen van het tweede getal

4) beide getallen optellen

5) de komma terug invoeren
Energyfellow schreef: ma 31 dec 2012, 13:32
In welke gevallen moet je de uitkomst van een bewerking in het 2's-complement opnieuw terug omzetten?
Terug omzetten naar wat?
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Gebruikersavatar
Berichten: 122

Re: Binair Rekenen

317070,
317070 schreef: ma 31 dec 2012, 14:51
3) minteken vervangen door een plus teken en het tegengestelde nemen van het tweede getal
Dus ik moet niet meer +1 doen nadat ik het complement van het tweede getal heb genomen?

Stel dat ik het terug naar het decimaal stelsel wil, dan moet ik van mijn resultaat altijd het 2's Complement nemen m.a.w. ongeacht of het getal negatief of positief zal zijn, moet ik het altijd opnieuw omzetten om het decimaal te krijgen?

Misschien nog een klein vraagje, wat is het verschil tussen signed en unsigned bij 2's-Complement (is het het eerste een negatieve waarde en het tweede gewoon een positieve waarde)?

Dank bij voorbaat,

Roger

Gebruikersavatar
Berichten: 5.609

Re: Binair Rekenen

Dus ik moet niet meer +1 doen nadat ik het complement van het tweede getal heb genomen?
Ik zei niet het complement, ik zei het tegengestelde.

Hoe neem je het tegengestelde van een getal in 2's complement? Volgens mij was dat het complement van het getal + of -1 naargelang of het getal positief of negatief is. In dit geval dus het complement+1.
Stel dat ik het terug naar het decimaal stelsel wil, dan moet ik van mijn resultaat altijd het 2's Complement nemen m.a.w. ongeacht of het getal negatief of positief zal zijn, moet ik het altijd opnieuw omzetten om het decimaal te krijgen?
Waarom zou je naar het decimaal stelsel willen? Je moet altijd een getal omzetten als je een getal van binair naar decimaal wil omzetten. Kun je je vraag misschien duidelijker formuleren?
Misschien nog een klein vraagje, wat is het verschil tussen signed en unsigned bij 2's-Complement (is het het eerste een negatieve waarde en het tweede gewoon een positieve waarde)?
Als je zegt dat een binaire reeks signed is, dan kan ze zowel negatieve als positieve waarden voorstellen. Als ze unsigned is enkel positieve waarden. Op zich heeft dat niet zoveel met 2's complement of niet te maken. Wel is het zo dat je bij unsigned nooit een tekenbit hebt.

Maar mijn antwoorden zijn waarschijnlijk niet zo duidelijk, aangezien ik je vragen ook niet zo duidelijk vind...
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Gebruikersavatar
Berichten: 122

Re: Binair Rekenen

Dat zou dan moeten worden:

1 0 1 1 0 1 1 1 1

1 0 0 1 0 1 0 0

1 0 1 1 0 1 1 1 1

__0 1 1 0 1 0 1 1

1 1 1 0 1 1 0 1 0

(111011,010)2

Binair:

45,875 - 18,5 = 27,375 maar dat is toch niet hetzelfde als (111011,010)2 = 51,25.

Gebruikersavatar
Berichten: 768

Re: Binair Rekenen

Energyfellow schreef: ma 31 dec 2012, 15:02
317070,

Dus ik moet niet meer +1 doen nadat ik het complement van het tweede getal heb genomen?

Stel dat ik het terug naar het decimaal stelsel wil, dan moet ik van mijn resultaat altijd het 2's Complement nemen m.a.w. ongeacht of het getal negatief of positief zal zijn, moet ik het altijd opnieuw omzetten om het decimaal te krijgen?

Misschien nog een klein vraagje, wat is het verschil tussen signed en unsigned bij 2's-Complement (is het het eerste een negatieve waarde en het tweede gewoon een positieve waarde)?

Dank bij voorbaat,

Roger
Bij 2's complement ga je er default van uit dat je met signed getallen werkt. Door te kijken naar de eerste (hoogste) bit van een 2's complement getal weet je of dat negatief of positief is: een 1 als eerste bit is een negatief getal, een 0 is een positief getal.

2's complement bereken je als volgt: alle bits inverteren en 1 optellen bij het bekomen getal. Of, van rechts naar links werkend, alle bits copieren tot en met de eerste 1, en van dan af alle bits inverteren.

In jouw geval:

1 0 1 1 0 1 , 1 1 1

+ 0 0 1 1 0 1, 1 0 0 (zijnde 2's complement van 10010,100, en met 1 extra leading 0)

--------------------------

1 1 1 0 1 1, 0 1 1

zijnde -18,125 - (- 13,5) = - 4,625

Hoop dat dit helpt.
In the beginning, there was nothing. Then he said:"Light". There was still nothing but you could see it a whole lot better now.

Gebruikersavatar
Berichten: 122

Re: Binair Rekenen

Danny,

Ze gaf me twee willekeurige waarden die ik van elkaar moet aftrekken: (101101,111)2 - (10010,1)2.

Moet ik er dan al van uitgaan dat het eerste getal negatief is, nee toch, want we hebben toch maar de unsigned binaire waarde?

Persoonlijk zou ik het naar een 8-delig stelstel plaatsen, op die manier blijft de waarde hetzelfde maar zien we duidelijk dat het twee positieve getallen zijn: (00101101, 111)2 - (00010010,100)2.

Als ik dat dan via het 2's - Complement zou oplossen:

Het tweede getal wordt dan: 00010010,100 -> 11101101,011 -> 11101101,100.

0 0 1 0 1 1 0 1, 1 1 1

1 1 1 0 1 1 0 1, 1 0 0

_________________

0 0 0 1 1 0 1 1, 0 1 1

En we hebben een overflow.

Het geeft ons:

1 + 2 + 8 + 16 = 27

0,25 + 0,125 = 0,375

->27,375

Wat hetzelfde is als ik de waarden omzet naar het decimale stelsel en zo bereken.

Is deze redenering fout?

Gebruikersavatar
Berichten: 5.609

Re: Binair Rekenen

Energyfellow schreef: ma 31 dec 2012, 18:46Ze gaf me twee willekeurige waarden die ik van elkaar moet aftrekken: (101101,111)2 - (10010,1)2.

Moet ik er dan al van uitgaan dat het eerste getal negatief is, nee toch, want we hebben toch maar de unsigned binaire waarde?

(...)

Is deze redenering fout?
Deze redenering is helemaal correct. De vraag is of je de unsigned binaire waarde hebt gekregen. Danny gaat uit van niet en neemt aan dat de eerste gegeven bit het tekenbit is. Persoonlijk zou ik ook denken dat jouw interpretatie de juiste is, maar ik snap wel waar de verwarring vandaan komt. Misschien is de originele vraag duidelijker over wat er precies gegeven is?
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Gebruikersavatar
Berichten: 122

Re: Binair Rekenen

De originele vraag was: Bereken of zet om naar het aangegeven talstelsel: (101101,111)2 - (10010,1)2 = (...)2.

Gebruikersavatar
Berichten: 5.609

Re: Binair Rekenen

De originele vraag was: Bereken of zet om naar het aangegeven talstelsel: (101101,111)2 - (10010,1)2 = (...)2.
Dan lijkt me dat je hem juist hebt.
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Gebruikersavatar
Berichten: 768

Re: Binair Rekenen

Energyfellow schreef: ma 31 dec 2012, 18:46
Danny,

Ze gaf me twee willekeurige waarden die ik van elkaar moet aftrekken: (101101,111)2 - (10010,1)2.

Moet ik er dan al van uitgaan dat het eerste getal negatief is, nee toch, want we hebben toch maar de unsigned binaire waarde?

Persoonlijk zou ik het naar een 8-delig stelstel plaatsen, op die manier blijft de waarde hetzelfde maar zien we duidelijk dat het twee positieve getallen zijn: (00101101, 111)2 - (00010010,100)2.

Als ik dat dan via het 2's - Complement zou oplossen:

Het tweede getal wordt dan: 00010010,100 -> 11101101,011 -> 11101101,100.

0 0 1 0 1 1 0 1, 1 1 1

1 1 1 0 1 1 0 1, 1 0 0

_________________

0 0 0 1 1 0 1 1, 0 1 1

En we hebben een overflow.

Het geeft ons:

1 + 2 + 8 + 16 = 27

0,25 + 0,125 = 0,375

->27,375

Wat hetzelfde is als ik de waarden omzet naar het decimale stelsel en zo bereken.

Is deze redenering fout?
Dat is inderdaad het probleem: als je over signed of unsigned spreekt, dan is dat alleen "in the mind of the programmer". (als je dit aan een microprocessor geeft, ziet hij alleen bits natuurlijk). Ik ging er inderdaad van uit dat beide getallen al signed waren, en dan is mijn berekening juist. Als je beide getallen als unsigned bekijkt, zal je inderdaad op een andere uitkomst uitkomen. En dan zal jouw oplossing ook wel juist zijn zoals 317070 al zei.

PS: jouw omzetting naar octaal zal hier niet veel helpen vrees ik echter, want als je de getallen als signed beschouwt, moet je leading 1's gebruiken. Dus als ik jouw eerste getal als negatief beschouw, kan ik het net zo goed omzetten naar octaal als : 11101101, 111. Dus ook hier blijft de regel gelden: signed of unsigned is in the mind of the programmer.
In the beginning, there was nothing. Then he said:"Light". There was still nothing but you could see it a whole lot better now.

Gebruikersavatar
Berichten: 400

Re: Binair Rekenen

Mijn wiskunde is niet van zo'n hoog nivo dat ik weet waar de 2 voor staat na de komma.

Maar als je binair aan het rekenen bent , mag je de 2 dan wel gebruiken, of moet je dan 10 schrijven ( binair 2).

Leg ook even uit voor deze dummy 2s-complement.

Gebruikersavatar
Berichten: 122

Re: Binair Rekenen

jadatis schreef: ma 07 jan 2013, 20:41
Mijn wiskunde is niet van zo'n hoog nivo dat ik weet waar de 2 voor staat na de komma.

Maar als je binair aan het rekenen bent , mag je de 2 dan wel gebruiken, of moet je dan 10 schrijven ( binair 2).

Leg ook even uit voor deze dummy 2s-complement.


Als ik me niet vergis is (0,2)10 = (0,0011001100...)2.

Gebruikersavatar
Berichten: 2.609

Re: Binair Rekenen

jadatis schreef: ma 07 jan 2013, 20:41
Maar als je binair aan het rekenen bent , mag je de 2 dan wel gebruiken, of moet je dan 10 schrijven ( binair 2).
Die 2 in de notatie (100)2 dient juist om aan te geven dat het getal in basis 2 staat en dus niet 100 is, maar 4.

two's complement is een notatie om negatieve getallen binair te kunnen voorstellen. Kijk ook eens hier. Er zijn andere manieren om dit te doen (bv sign bit, one's complement) maar sommige notaties maken rekenwerk eenvoudiger in bepaalde situaties.

Gebruikersavatar
Berichten: 400

Re: Binair Rekenen

Dan snap ik ook waarom dit onderwerp bij programeren staat en niet bij wiskunde.

Het artikel van de link geeft de mogelijke notatie voor negatieve getallen aan, maar dan is mij niet duidelijk hoe het onderscheid wordt gemaakt tussen een klein negatief getal en een groot positief getal.

(0)2 en (1)2 worden omgewisseld en aan het eind (1)2 bij opgeteld .

Ik denk dat dat hetzelfde is als ( 2)10 -(3)10 = (-1)10 wat dan als getal ( 9999)10 weergegeven wordt, en dat dit bij binair rekenen door maar 2 cijfers makkelijk, werkt met de nullen en eenen omwisselen.

Maar het onderscheid tussen klein neg en groot pos blijft me dwarszitten. dus hoe ziet de computer bij 8 digits het verschil tussen (-1)10 en ( 254)10. beide tonen ( 11111110)2 , vergeef me als ik er eentje naast zit, het gaat om het principe.

Reageer