Aritmetiska operationer med ytterligare kod. Ytterligare kod (nummerrepresentation)

Huvudartikeln: Disjunktiv normal form

Enkel konjunktion   eller konjunktioner   kallas konjunktionen för en viss ändlig uppsättning variabler eller deras negationer, och varje variabel uppstår inte mer än en gång. Disjunktiv normal form   eller disjunktiva normalform   kallas disjunction of simple conjunctions. Elementär konjunktion

    högerom varje variabel ingår i det inte mer än en gång (inklusive negation);

    totaltom varje variabel (eller dess negation) går in exakt 1 gång

    monotonom det inte innehåller negativ av variabler.

Till exempel - är DNF.

Perfekt disjunktiv normal form   eller PDNF   i förhållande till vissa givna ändliga uppsättningar av variabler kallas en sådan DNF, där varje variabel innehåller alla variabler av den givna uppsättningen, dessutom i samma ordning. Till exempel :.

Det är lätt att verifiera att en viss DNF motsvarar varje Boolean funktion, och till och med DNFN till en annan funktion än den identiska nollpunkten. För detta räcker det att hitta alla de boolesiska vektorerna, på vilka dess värde är 1 i sannoliktabellen för denna funktion, och för varje sådan vektorkonstruktion en konjunktion Där. Disjunctionen av dessa conjunctions är PDNF av den ursprungliga funktionen, eftersom på alla boolska vektorer sammanfaller dess värden med värdena för den ursprungliga funktionen. Till exempel, för implikation, är resultatet att du kan förenkla upp till.

[Citation behövs] Konjunktiv normal form (knf)

Huvudartikeln: Konjunktiv normal form

Konjunktiv normal form1   (CNF) bestäms duellt för DNF. Enkel disjunktion   eller en klausul   Disjunktionen av en eller flera variabler eller deras negationer kallas, och varje variabel går inte in mer än en gång. CNF är en sammanslutning av enkla disjunktioner.

Perfekt konjunktiv normal form (SKNF), med avseende på en viss bestämd uppsättning variabler, kallas en sådan CNF, där alla variabler av en given uppsättning ingår i varje disjunktion och i samma ordning. Eftersom (C) CNF och (C) DNF är ömsesidigt dubbla, upprepar egenskaperna (C) av CNF alla egenskaper hos (C) DNF, i stort sett "exakt motsatt".

En CNF kan konverteras till dess ekvivalenta DNF genom att öppna fästena enligt regeln:

som uttrycker fördelningen av en konjunktion med avseende på disjunktion. Efter det är det nödvändigt att ta bort upprepade variabler eller deras negationer i varje konjunktion, och också för att avstå från disjunktionen alla konjunktioner där variabeln uppträder tillsammans med dess negativa. I det här fallet kommer resultatet inte nödvändigtvis att vara PDNF, även om den ursprungliga CNF var CNF. På samma sätt kan du alltid gå från DNF till CNF. För att göra detta, använd regeln

uttrycka fördelning av disjunktion med avseende på samband. Resultatet måste omvandlas på det sätt som beskrivs ovan, ersätta ordet "conjunction" med "disjunction" och vice versa.

16 Lagar om omvandling av logiska uttryck: enparelement, negationer.

I logikens algebra finns lagar som skrivs i form av relationer. Logiska lagar tillåter ekvivalenta (ekvivalenta) omvandlingar av logiska uttryck. Transformationer kallas likvärdiga om de sanna värdena för originalen och erhållna efter transformationen av den logiska funktionen är desamma för alla värden av de logiska variablerna som finns i dem.

För enkelhet presenterar vi grundlagen i algebraens logik för två logiska variabler. ENoch V.Dessa lagar gäller för andra logiska variabler.

1. Riktlinjerna mot motsägelse:

2. Lag av den uteslutna mitten:

3. Lagen om dubbel negation:

4. Morgan lagar:

5. Repetitionens lagar: A & A = A; A v A = A; B & B = B; B v B = B.

6. Absorptionslagar: EN   (A & B) = A; A & (A   B) = A.

7. Lagarna för uteslutning av konstanter: EN   1 = 1; EN   0 = A; A & 1 = A; A & O = 0; B   1 = 1; B   0 = B; B & 1 = B; B & O = 0.

8. Limningslagen:

9. Överenskommelsens lag: (A   B) = (B   A).

För logiska variabler är de allmänna matematiska lagarna också giltiga. För enkelhet ger vi de allmänna matematiska lagarna för tre logiska variabler. A, B och C:

1. Kommutativ lag: A & B = B & A; EN   B = b   A.

2. Associativ lag: A & (B & C) = (A & B) & C; EN   (B   C) = (A   B)   C.

3. Distributionsrätt: A & (B   C) = (A & B)   (A & C).

Som redan noterat kan vi med hjälp av lagarna i algebraens algebra producera ekvivalenta omvandlingar av logiska uttryck för att förenkla dem. I algebra av logik fastställs följande regler (prioriteringar) för att utföra logiska operationer baserat på överenskommelsen: Operationer utförs först inom parentes, sedan i följande ordning: inversion (negation), konjunktion (&), disjunction (v), implication (⇒), ekvivalent (⇔)

Utför en omvandling, till exempel en logisk funktion

tillämpa tillämpliga lagar om algebra av logik.

17 Lag om transformation av logiska uttryck: kombinationslagar.

Lagarna med formell logik

De enklaste och nödvändiga sanna kopplingarna mellan tankar uttrycks i de grundläggande lagarna av formell logik. Sådana är identitetslagar, icke-motsägelse, utesluten tredje, tillräcklig anledning.

Dessa lagar är grundläggande eftersom de i logik spelar en särskilt viktig roll, är de vanligaste. De tillåter oss att förenkla logiska uttryck och bygga slutsatser och bevis. De tre första av de ovan nämnda lagarna identifierades och formulerades av Aristoteles, och lagen med tillräcklig anledning - G. Leibniz.

Identitetsloven: I ett visst resonemang måste varje koncept och dom vara identiskt med sig själv.

Lagen om icke-motsägelse: det är omöjligt att samma är samtidigt och inte är inneboende i samma i samma relation. Det är det omöjligt att säga och förneka något samtidigt.

Den uteslutna mittens lag: av två motsägelsefulla domar, en är sant, den andra är falsk, och den tredje ges inte.

Lagen av tillräcklig anledning: varje sann tanke måste vara tillräckligt motiverad.

Den sista lagen säger att beviset på någonting innebära att man förklarar exakt och bara sanna tankar. Falska tankar kan inte bevisas. Det finns ett bra latinska ordspråk: "Att err är karakteristisk för varje person, men att insistera på ett fel är karakteristisk bara för en dåre." Formeln i denna lag är inte, eftersom den bara har en meningsfull karaktär. Som argument för att bekräfta den sanna tanken kan sanna domar, faktummaterial, statistik, vetenskapslagar, axiomer, beprövade teorier användas.

Lagen om algebra av meningar

Algebra av uttalanden (algebra av logik) är en gren av matematisk logik som studerar logiska operationer på uttalanden och regler för att omvandla komplexa uttalanden.

Vid lösa många logiska problem är det ofta nödvändigt att förenkla formlerna erhållna genom formalisering av deras tillstånd. Förenkling av formler i algebra med uttalanden görs på grundval av ekvivalenta omvandlingar baserade på de grundläggande logiska lagarna.

Lagar om algebra av propositioner (algebra av logik) är tautologier.

Ibland kallas dessa lagar teorier.

I algebra av uttalanden uttrycks logiska lagar som likvärdighet av ekvivalenta formler. Bland lagarna sticker ut sådana som innehåller en variabel.

De fyra första lagarna nedan är de grundläggande lagarna för algebra av uttalanden.

Identitetslagen

Varje koncept och dom är identiskt med sig själv.

Identitetsloven innebär att det i processen av resonemang är omöjligt att ersätta en tanke för ett annat, ett koncept för en annan. Om denna lag bryts är det möjligt att logiska fel uppstår.

Till exempel resonemang Rättvis säger de att språket kommer till Kiev, och igår köpte jag en rökt tunga, så nu kan jag säkert gå till Kievfel, eftersom det första och andra ordet "språk" betecknar olika begrepp.

I argumentet: Förflyttning för evigt. Att gå till skolan är en rörelse. Därför går i skolan för alltidordet "rörelse" används i två olika sinnen (den första - i filosofisk mening - som materiens attribut, den andra - i vanligt bemärkelse - som en handling för rörelse i rymden), vilket leder till en falsk slutsats.

Lagen om icke-motsägelse:

Domen och dess negation kan inte vara sant samtidigt. Det är, om uttalandet EN- Sant, hans förnekelse inte enmåste vara falsk (och vice versa). Då kommer deras arbete alltid att vara falskt.

18 Minimera den analytiska inspelningen av logiska funktioner: Carnot-kartmetoden.

Karno Map   - ett grafiskt sätt att minimera byte (booleska) funktioner, vilket ger relativ enkelhet att arbeta med stora uttryck och eliminera potentiella raser.

En ytterligare kod med ett negativt tal kan erhållas genom att invertera modulen för ett binärt tal (första tillägget) och lägga till en till inversionen (andra tillägget) eller subtrahera numret från noll.

Tilläggskoden (tillägg till 2) av ett binärt tal erhålls genom att lägga till 1 till minst signifikanta siffran för dess tillägg till 1.

Binärt 8-bitars nummer med ett tecken   I tilläggskoden kan representera ett heltal i intervallet -128 till +127. Om den ledande siffran är noll, är det största heltalet som kan skrivas i de återstående 7 siffrorna    2 7 - 1 (\\ displaystyle 2 ^ (7) -1)det är 127.

decimal
idé
Binär representation (8 bitar)
rakt avkastning ytterligare
127 01111111 01111111 01111111
1 00000001 00000001 00000001
0 00000000 00000000 00000000
-0 10000000 11111111 ---
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-3 10000011 11111100 11111101
-4 10000100 11111011 11111100
-5 10000101 11111010 11111011
-6 10000110 11111001 11111010
-7 10000111 11111000 11111001
-8 10001000 11110111 11111000
-9 10001001 11110110 11110111
-10 10001010 11110101 11110110
-11 10001011 11110100 11110101
-127 11111111 10000000 10000001
-128 --- --- 10000000

Ytterligare kod för decimaltal

Samma princip kan också användas i decimaltalsrepresentation av datorn: för varje siffra ersätts siffra X med 9 - X och det resulterande numret läggs till 1. När man exempelvis använder fyrsiffriga nummer -0081, ersätts den med 9919 (9919 + 0081 = 0000, femte siffra kastas ut).

När man tillämpar samma idé på det vanliga 10-bitarssystemet, kommer det att visa sig (till exempel för en hypotetisk processor med ett 10-bitars nummersystem):

10: e siffran
  ("normal" inmatning)
10: e siffran
  ytterligare kod
... ...
13 0013
12 0012
11 0011
10 0010
9 0009
8 0008
... ...
2 0002
1 0001
0 0000
-1 9999
-2 9998
-3 9997
-4 9996
... ...
-9 9991
-10 9990
-11 9989
-12 9988
... ...

Konvertering till tilläggskod

Omvandling av ett nummer från en direkt kod till en ytterligare en utförs enligt följande algoritm.

  1. Om numret som är skrivet i direktkoden är positivt, läggs den ledande (tecken) siffran lika med 0 till den och omvandlingen slutar där;
  2. Om numret som är skrivet i den direkta koden är negativt, är alla siffror i siffran inverterade och 1 läggs till i resultatet. Den viktigaste siffran (1) läggs till i det resulterande numret.

Ett exempel. Vi omvandlar det negativa talet -5 som skrivs i direktkoden till en extra. Den direkta koden för numret -5 tog modulo:

  omvänd kod:

Lägg till resultatet 1

Låt oss lägga till ett tecken en siffra till vänster.

För den inverse transformen används samma algoritm. nämligen:

Vi vrider in alla siffror i numret, vilket ger en omvänd kod:

Lägg till resultatet 1

Och kolla, lägg till med extra kod

0101 + 1011 = 10000, den femte siffran kastas.

p-adiktal

I systemet p-adiska tal ändrar tecknet på numret genom att konvertera numret till dess extra kod. Till exempel, om ett 5-talssiffran används, är siffran motsatsen till 1000 ... (1) 4444 .... (-1).

Implementering av algoritmen för konvertering till tilläggskoden (för 8-bitars nummer)

Pascal

Om a< 0 then a := ((not a ) or 128 ) + 1 ;

C / C ++

Int konvertera (int a) (om (a< 0 ) a = ( ~- a | 128 ) + 1 ; return a ; }

Fördelar och nackdelar

fördelar

  • Allmänna instruktioner (processor) för addition, subtraktion och vänster skift för signerade och osignerade nummer (endast skillnader i de aritmetiska flaggor som måste kontrolleras för att kontrollera överflödet i resultatet).
  • Frånvaron av numret "minus noll".

brister

  • Representationen av ett negativt tal kan inte läsas av de vanliga reglerna, för dess uppfattning behöver du en särskild färdighet eller beräkning
  • I vissa representationer (till exempel en binär-decimal kod) eller deras beståndsdelar (till exempel en mantissa med ett flytande punktnummer) är ytterligare kodning obekvämt
  • Modulen för det största antalet är inte lika med modulen för det minsta antalet. Till exempel, för ett åtta bitars heltal med ett tecken, maximalt antal: 127 10 = 01111111 2, minimumsnumret: -128 10 = 10000000 2. Följaktligen är motsatsen inte sant för något nummer. En teckenbytesoperation kan kräva ytterligare verifiering.

För att bestämma tecknet på numret i binär kod används 0 och 1. Med en noll är tecknet "+" kodat. Enheten är kodad av tecknet "-".

För att representera positiva och negativa tal i databehandling används DIRECT, REVERSE och ADDITIONAL-koder.

Positiva tal   i framåt, omvänd och ytterligare koder visas på samma sätt - binära koder med siffran 0 i teckenbiten. Till exempel:

Negativa siffror   i direkt, omvänd och extra koder har en annan bild.

1. Direkt kod. Siffran 1 placeras i teckensiffran och den binära koden av dess absoluta värde placeras i siffrorna i den digitala delen av numret. Till exempel:

2. Omvänd kod. Det visar sig genom att invertera alla siffror i den binära koden för det absoluta värdet av ett tal, inklusive teckensiffran: nollor ersätts av en och nollor. Till exempel:

3. Ytterligare kod. Det visar sig bildandet av returkoden med efterföljande tillägg av en till sin yngre kategori. Till exempel:

Vanligtvis omvandlas negativa decimaltal automatiskt till en omvänd eller ytterligare binär kod när de skrivs in i maskinen och lagras, flyttas och är inblandade i operationer i den här formen. När man tar bort sådana nummer från bilen, omvänt omvandling till negativa decimaltal.

exempel:   Ange numret +7, -12, -15, -16 i direkta, omvända och ytterligare koder.

När man översätter från omvänden i rak   kod händer nummer inversion.

När man översätter från tillägg till direkt kod   är 1) inversion av siffror i siffror, 2)+1 läggs till   till den låga ordningen av det inverterade numret.

Aritmetiska transaktioner på tecknade nummer

I de flesta datorer används inte subtraktionsoperationen. I stället reduceras och subtraheras tillägget av invers- eller extrakoder. Detta gör att du kan förenkla designen av ALU betydligt.

Lägga till omvända koder .   Här, när du lägger till nummer A och B, finns det fyra huvud och två speciella fall:

Algebraisk tillägg

Om resultatet erhålls med ett minustecken (med "1"), så blir resultatet är nödvändigt   konvertera till direkt kod !!!

1. A och B är positiva.   Vid summeringen läggs alla siffror in, inklusive teckenets siffra. Eftersom teckensiffrorna i de positiva termerna är noll är siffran i summanumman också noll. Till exempel:

Fick det rätta resultatet.

2. A är positiv, B är negativ och absolut i storlek större än A.   | A |< |B|

Till exempel:

Om resultatet erhålls med ett minustecken med en "1", måste resultatet omvandlas till en direkt kod !!!

Det korrekta resultatet erhålls i omvänd kod. När man översätter till en direkt kod, är bitarna i den digitala delen av resultatet inverterade: 1 0000111 = -7 10.

3. A är positiv, B är negativ och är mindre i absolutvärde än A.   | A | \u003e | B |

Till exempel:


Datorn korrigerar det initialt erhållna felaktiga resultatet (6 istället för 7) enhet överföring   från teckenrankningen till lågordningsbeloppet.

4. A och B är negativa.   Till exempel:


Datorns initiala felaktiga resultat (den inverterade koden på numret -11 10 istället för den inversa koden på numret -10 10) korrigeras genom att överföra enheten från teckenbiten till summan av siffraens lägre siffra. När man översätter resultatet till en direkt kod, är bitarna i den digitala delen av numret inverterade: 1 0001010 = -10 10.

När man lägger till kan det uppstå en situation när de övre bitarna i resultatet av operationen inte passar i det minnesområde som är tilldelat för det. Denna situation heter överflöde av siffror med nummerformat.   Särskilda verktyg används för att upptäcka överflöde och att meddela om ett fel i datorn. Nedan finns två möjliga översvämningsfall.

5. A och B är positiva, summan av A + B är större än eller lika med 2 n-1 ,   där n är antalet siffror i talformatet (för ett enkelbyteformat, n = 8, 2 n-1 = 27 = 128). Överflödesalternativ.

Till exempel:


Sju siffror i den digitala delen av talformatet inte tillräckligt   för att tillgodose en åttesiffrig summa (162 10 = 10100010 2) därför den höga delen av summan är i teckenbiten.   Detta orsakar felmatchning av summanumret och villkoren i villkorenatt är bevis på bitflöde.

Principerna för binär kodning ingår i principerna för drift av datorer: all data representeras som binära nummer kodade på något sätt. Koder med binära siffror är nödvändiga för att kunna utföra logiska och aritmetiska operationer på data.

I artikeln "Antal system" betraktades endast positiva siffror. När man skriver signerade binära nummer i sitt format är det nödvändigt att ange två fält: ett fält som definierar tecknet på ett tal och ett fält som karaktäriserar modulen för ett tal. En särskild teckenbit (binär bit) är reserverad för tecknet på numret. De återstående siffrorna bestämmer modulens modul. Teckenbiten är tilldelad till vänster om modulens modul, med "+" tecknet som motsvarar teckensbitens nollvärde och "-" tecknet - den ena.

I historien om utvecklingen av datorer användes tre huvudalternativ för att representera teckennummer:

  • direkt kod eller tecken och värde;
  • omvänd kod eller kod med tillägg till en;
  • ytterligare kod eller kod med tillägg till två.

I alla tre koderna ser positiva tal ut på samma sätt. Skillnader i form av att skriva negativa tal i omvänd och extra koder gäller bara hur modulen representerar ett tal, och kodningsmetoden och platsen för teckenbiten förblir oförändrad.

Direkt binär nummerkod

I dbestår numret av signalkoden och modulen för numret, som båda behandlas separat.

Exempel på direktkod för korrekta fraktioner:

Exempel på direktkod för heltal:

Representationen av siffror i den direkta koden har en signifikant nackdel - den formella summeringen av siffror med olika tecken ger ett felaktigt resultat. Ett exempel är tillägget av två siffror och. I direktkoden har dessa siffror formen: och. Uppenbarligen bör resultatet vara -2, vilket i direktkoden kan skrivas som 1.010. Samtidigt, med direkttillägg får vi

det vill säga ett värde som skiljer sig avsevärt från det förväntade.

Förfarandet för korrekt tillägg av siffror i direktkoden existerar, men det är mycket besvärligt. Den direkta koden har en annan nackdel - noll har två olika representationer, nämligen, och det matematiskt inte meningsfullt.

På grund av de noterade bristerna i datorer används inte en direkt kod, utan omvänd och extra koder.

I dessa kodningssystem förblir placeringen av teckenbiten och kodningsmetoden densamma som i direktkodningen. Signbiten betraktas emellertid inte längre som en separat, men anses vara en integrerad del av numret, liknande siffrorna i nummemodulen och tillsammans med dem.

Omvänd binär nummerkod

För negativa binära tal, är förfarandet för att få returkoden på följande sätt: i teckenbiten är skriven av en och utsläpp direkt i digitala enheter kod ersätts av nollor och nollor enheter.

Exempel på returkoden för korrekta fraktioner:

.

Exempel på omvänd kod för heltal:

.

Som ni kan se, de positiva siffrorna i både framåt och bakåt koder ser likadana ut.

Även returkoden och löser problemet med addition och subtraktion av tal med olika tecken, det har sina nackdelar. För det första, är summan processen en två nummer, vilket ökar exekveringstid av operationen. För det andra, som i direkt kod omvänd - två representationer av noll och.

Ytterligare binär nummerkod

Ytterligare kod negativa binära tal bildas genom följande regel: digitala siffror direkt enhet ersättas med nollor kod och nollor - enheter, och sedan lägga till en LSB.

Tänk exempelvis på numret Xvilken i direktkoden har formen:

Då kan omvänd kod skrivas som

.

För ytterligare kod, lägg till 1 till den lägre ordningen av omvänd kod:

.

Exempel på tilläggskod för korrekta fraktioner:

.

Exempel på extra kod för heltal:

.

Positiva siffror i tilläggsnummer skrivs på samma sätt som i live. I representationen av tal i två komplement är bara en form av marken: 0,0 ... 00, med noll anses vara ett positivt tal, som dess tecken bit är 0.

I de flesta datorer representeras negativa tal i ytterligare kod.

Tillsättning och subtraktion av siffror i omvänd och extra koder

Subtraktion görs tillägg av siffror, varav med ett minustecken.

När du utför algebraiska tillägg av en teckenbit och siffror modul betraktas som en helhet och behandlas tillsammans. Överföring från äldre (tecken) och den motsatta urladdning i de ytterligare koder anses annorlunda. I fallet med den inversa koden överföringsenheten från teckenbiten sätts till LSB summa. Genom att använda tilläggsnummer överföringsenheten från teckenbiten kasseras.

Exempel 1   Lägg till nummer   och

När vi använder en omvänd kod får vi:

När vi använder den extra koden får vi:

Om teckensiffran i resultatet är noll betyder det att ett positivt tal tas emot, vilket ser ut som det är i direktkoden. En enhet i teckenbiten innebär att resultatet är negativt och dess inmatning motsvarar representationen i koden där operationen utfördes.


Uppsats om ämnet:

Ytterligare kod (nummerrepresentation)



Plan:

      introduktion
  • 1 Antal representation i ytterligare kod
  • 2 Omvandling av ytterligare kod
  • 3 Ytterligare kod för decimaltal
  • 4 Implementering av algoritmen för konvertering till inverterad kod (för 8-bitars nummer)
    • 4,1 Pascal
    • 4,2 C / C ++
  • 5 Fördelar och nackdelar
    • 5.1 Förmåner
    • 5.2 Nackdelar
  • 6 Programvaruomvandlingsexempel
    • 6,1 C # .NET / C-stil

introduktion

Ytterligare kod   (Eng. två komplementibland tvåor-komplement) - Det vanligaste sättet att representera negativa heltal i datorer. Det låter dig ersätta subtraktionsoperationen med additionoperationen och göra tilläggs- och subtraktionsoperationerna samma för signerade och osignerade nummer, vilket förenklar datarkitekturen. En ytterligare kod med ett negativt tal kan erhållas genom att invertera modulen för det binära numret (första tillägget) och lägga till en till inversionen (andra tillägget). Eller genom att subtrahera numret från noll.

Tilläggskoden (tillägg till 2) av ett binärt tal erhålls genom att lägga till 1 till minst signifikanta siffran för dess tillägg till 1.

Tillägg till 2 binärt tal definieras som det värde som erhålls genom att subtrahera numret från största delen av två (från 2 N för N-bit-tillägget till 2).


  1. Representation av ett nummer i en extra kod

När du skriver ett nummer i tilläggskoden är den höga ordningen betydande. Om dess värde är 0, innehåller de återstående siffrorna ett positivt binärt tal som matchar direktkoden. Om teckenbiten är 1, innehåller de återstående siffrorna ett negativt binärt tal som omvandlas till en extra kod. För att få ett värde som är motsatt i tecken, inverteras alla siffror, inklusive tecknet, och en läggs till i resultatet.

Binärt 8-bitars nummer med ett tecken   I tilläggskoden kan representera ett heltal i intervallet -128 till +127. Om högordningsbiten är noll, kan det största heltalet som kan skrivas i de återstående 7 siffrorna vara 2 7 - 1, vilket är 127.

decimal
idé
Binär representationskod (8 bitar)
rakt ytterligare
127 01111111 01111111
1 00000001 00000001
0 00000000 00000000
-0 10000000 --------
-1 10000001 11111111
-2 10000010 11111110
-3 10000011 11111101
-4 10000100 11111100
-5 10000101 11111011
-6 10000110 11111010
-7 10000111 11111001
-8 10001000 11111000
-9 10001001 11110111
-10 10001010 11110110
-11 10001011 11110101
-127 11111111 10000001
-128 -------- 10000000

När du tillämpar samma idé på det vanliga decimalsystemet kommer det att visa sig (till exempel för en hypotetisk processor som använder ett decimalsystem):

10-årigt siffersystem
  ("normal" inmatning)
10-årigt siffersystem
  ytterligare kod
... ...
13 0013
12 0012
11 0011
10 0010
9 0009
8 0008
... ...
2 0002
1 0001
0 0000
-1 9999
-2 9998
-3 9997
-4 9996
... ...
-9 9991
-10 9990
-11 9989
-12 9988
... ...

  2. Omvandling av tilläggskod

Omvandling av ett nummer från en direkt kod till en ytterligare en utförs enligt följande algoritm.

  1. Om numret som är skrivet i direktkoden är positivt, läggs den ledande (tecken) siffran lika med 0 till den och omvandlingen slutar där;
  2. Om numret som är skrivet i den direkta koden är negativt, är alla siffror i siffran inverterade och 1 läggs till i resultatet. Den viktigaste siffran (1) läggs till i det resulterande numret.

Ett exempel. Vi omvandlar det negativa talet -5 som skrivs i direktkoden till en extra. Den direkta koden för numret -5 tog modulo:

Lägg till resultatet 1

Låt oss lägga till ett tecken en siffra till vänster.

För den inverse transformen används samma algoritm. nämligen:

Vi vrider in alla siffror i numret, vilket ger en omvänd kod:

Lägg till till resultat 1 och kolla, lägg till med ytterligare kod

0101 + 1011 = 10000, den femte siffran kastas.

  3. Ytterligare kod för decimaltal

Samma princip kan också användas i decimaltalsrepresentation av datorn: för varje siffra ersätts siffra X med 9 - X och det resulterande numret läggs till 1. När man exempelvis använder fyrsiffriga nummer -0081, ersätts den med 9919 (9919 + 0081 = 0000, femte siffra kastas ut).

  4. Implementering av algoritmen för konvertering till den inverterade koden (för 8-bitars nummer)

  4,1. Pascal

Om a<0 then a:= ((not a) or 128 ) + 1 ;

  4,2. C / C ++

Om (a< 0 ) a = ( (~a) | 128 ) + 1 ;

  5. Fördelar och nackdelar

  5,1. fördelar

  • Samma register kan lagras som n-bit positivt tal och ( n-1) är det signerade bitnumret, med det gemensamma för båda formatoperationerna för addition, subtraktion och vänsterväxling.
  • Bekvämare packning av nummer i bitfält.
  • Frånvaron av numret "minus noll".

  5,2. brister

  • Ytterligare kod är inte uppenbar för nybörjare.
  • I komplexa format (t.ex. flytande punkt eller binär-decimal kod) avbryts de flesta fördelarna.
  • Modulen för det största antalet är inte lika med modulen för det minsta antalet. Exempel: signerat 8-byte heltal. Maximalt antal: 127 10 == 7F 16 == 01111111 2. Minsta antal: -128 10 == 80 16, tilläggskod == 10000000 2, tilläggskod. Följaktligen är motsatsen inte sant för något nummer. En teckenbytesoperation kan kräva ytterligare verifiering.

  6. Exempel på programkonvertering

Om data läses från en fil eller ett minnesområde där det lagras i binär ytterligare kod (till exempel en WAVE-fil) kan det vara nödvändigt att konvertera byte. Om data lagras i 8 bitar är det nödvändigt att värdena 128-255 är negativa.

  6,1. C # .NET / C-stil

Byte b1 = 254; // 11111110 (binär) byte b2 = 121; // 01111001 (binär) byte c = 1<< (sizeof (byte ) * 8 - 1 ) ; // 2 höjs till kraften av 7. Resultat: 10.000.000 (binärt)   byte b1Conversion = (c ^ b1) - c; // Resultat: -2. Och i själva verket den binära tilläggskoden.   byte b2Conversion = (c ^ b2) - c; // Resultatet förblir 121, eftersom teckenbiten är noll.


Denna uppsats är baserad på
Slumpmässiga artiklar

upp