Undertecknad Int: Signerad Magnitude Inledning Om någon bara hade lärt sig om osignerat int, och du bad dem att uppfinna ett sätt att representera negativa tal, skulle jag tro att de allra flesta skulle uppfinna signerad storlek. Begreppet signerad storlek är lätt nog. Gör den mest signifikanta bit teckenbiten. Om denna bit är 1, är värdet negativt. Om dess 0 är värdet positivt. Bas Tio till Signerad Storlek Här är algoritmen för att konvertera bas 10 (decimal) till signerad storleksordning med hjälp av N bitar. Från och med nu inkluderar bra antalet bitar när man talar om representationer. Således är det inte bara signerad magnitud, men signerad magnitud med användning av N bitar. Ignorera minustecknet (om det visas) och konvertera bas 10-värdet till binärt. Om den binära representationen inte har N-1 bitar, lägg den till N-1 bitar med 0s. Om exempelvis binär representation endast behöver k bitar, sätt sedan b (N-2) - k till 0 (N-2) - k där 0 N betyder N-nollor. (Det är här det är användbart att tänka på en bitsträng som en sträng). Om värdet är positivt, gör b N-1 0. Om det är negativt, gör sedan b N-1 1. Det är inte så svårt egentligen. För en 32-bitars bitsträng konverterar du värdet till unsigned 31-bitars bitsträng och lägger till en teckenbit för att indikera tecknet. Använd SM som en stenografi för signerad storlek, så jag behöver inte skriva ut det varje gång. SM till Base 10 Konvertera SM till bas 10 är inte så svårt heller. Dess omvända process. Tänk bara på de nedre N-1 bitarna i talet, dvs b (N-2) -0. (Det vill säga, ignorera teckenbiten). Konvertera det till bas 10, vilket kommer att ge ett icke-negativt värde. Om teckenbiten är 1, lägg sedan till ett negativt tecken till bas 10-värdet. Annars, inte. Ett exempel Anta att du vill representera 3 i SM med 4 bitar. Eftersom 3 är positiv konverterar du bara den till bas 2 för att få 11. Vi behöver dock 4 bitar, så vi kasta till 4 bitar för att få 0011. Antag att du vill representera -3 i SM med 4 bitar. Eftersom -3 är negativ, konvertera 3 till 3 bitar, unsigned, och du får 011. Numret är negativt, så lägg till en teckenbit på 1, för att få 1011. Ett annat sätt att göra detsamma är att konvertera 3 till 4 bitar , och vänd på teckenbiten. Antag att du vill representera 15 i SM med 4 bitar. Regeln säger normalt att konvertera till bas 2. Detta resulterar i 1111. Tyvärr, om du konverterar det tillbaka, det är -7. Så vad gick fel Det visar sig att 15 är större än det största möjliga representativa numret med 4 bitar i SM. Det betyder att du CANT representerar 15 med 4 bitar (du kan med 5 bitar). Detta är ett vanligt fenomen. Eftersom du har ett begränsat antal bitar, har du bara ett begränsat antal värden som kan representeras. Vissa värden kan inte representeras med ett visst antal bitar. Tja, diskutera i nästa avsnitt vad sortimentet av giltiga värden är, givet N-bitar, så du vet vilka värden som kan och kan inte översättas till SM med N-bitar. Hur många positivaNegativa värden Du vet att N bitar nu producerar 2 N olika bitsträngar. Om hälften är positiv är det 2 N 2 2 N-1 positiva värden. Det bör också finnas 2 N-1 negativa värden också. Lets fokusera på de positiva värdena. Du vet att den viktigaste biten redan är 0. Det betyder verkligen att du bara har N-1 bitar för att använda representativa positiva värden. Frågan reduceras då till, vad är det maximala värdet för N-1 bitar. Svaret är 2 N-1 - 1 (anslut bara N-1 till unsigned maximum value). Lyckligtvis är det mycket lätt att bestämma minimivärdet. Gör tecknen bit 1 för maximalt, och det är nu det största negativa värdet (magnitude). Så är minimivärdet - (2 N-1 - 1). Problem: Två nollor Ett problem går bra in är SM har två nollor. Det är en positiv noll (representerad av en bitstring med N nollor) och en negativ noll (representerad av en bitstring med 1 följt av N-1 nollor). Detta skapar problem eftersom när du vill jämföra eller lägga till två nummer behöver du hårdvara för att ta hänsyn till detta. Det är inte så att det inte går snabbt, men att det verkar lägga till komplikation till detta, annars är det bekvämt att representera signerade inkomster. En annan observation: vi har två representationer för samma värde. Det är därför viktigt att notera antalet värden. Vi har 2 N representationer, men vi har 2 N - 1 värden. Vi har ett mindre värde eftersom noll visas två gånger. Så det är inte så ovanligt att se mer än en representation som kartlägger till samma värde. Problem: Tillägg Det skulle vara trevligt om du lägger in signerade inlägg var precis som att lägga till unsigned ints. På så sätt skulle hårdvaran för att lägga till osignerade och signerade ints vara samma. Detta fungerar dock inte. Tänk på att lägga till -1 och -1 med 4 bitar SM. Det är 1001 1001 0010 (eftersom resultatet måste vara fyra bitar, ignorerar vi bära 1, i b 4. Det är normalt svaret är 10010, vilket är 5 bitar, men vi ignorerar den viktigaste biten för att hålla svaret på 4 bitar). Svaret är 2, vilket är felaktigt. Det borde vara -2. En väg kring detta problem är att lägga till allt, men ignorera teckenbiten. Sedan håller vi samma teckenbit som tidigare. Således, när vi lägger till -1 till -1, får vi 2, och sedan bevarar teckenbiten för att få -2. Det fungerar bra om du lägger till två positiva tal och två negativa tal. Men vad händer om du lägger till ett positivt och ett negativt tal. Då har du problem. Lägg till till exempel 1 till -1, och du har 0001 1001, vilket lägger till 1010 eller -2. Svaret ska vara 0. Återigen kan man designa en krets som gör rätt för SM, men det måste vara en annan krets från den som lägger till korrekt för osignerade ints. Eleverna förvirrar ofta följande: representerar ett negativt tal och negerar ett värde. Att negera ett värde innebär att ta ett värde x och beräkna - x. Resultatet av - x kan faktiskt vara positivt, om x är negativt till att börja med. Huvudskillnaden är representation kontra utförande av en operation. Att negera ett värde innebär att utföra en operation. Du kan negera ett värde, negera resultatet av negationen och så vidare. En viktig egenskap för negation är: --x x. Det vill säga om du nekar x två gånger, kommer du tillbaka det ursprungliga värdet. Lyckligtvis är det ganska lätt att negera ett SM-nummer. Du vänder den viktigaste biten. Att vända lite betyder att ersätta det med motsatt värde. Sålunda producerar vippning 0 en 1. Flipping a 1 ger en 0. Vi kan skriva detta som b N-1 b N-1 (för en N bit SM-representation). Primären (som ser ut som en apostrof) är negationen. Detta är logiskt INTE, vilket du borde ha sett i en diskret matematik kurs. Huvudet visas RÄTT av den bit det negerar. Eftersom det finns 256 möjliga bitmönster med 8 bitar kan det finnas 128 positiva och 128 negativa heltal. Du kanske har tänkt på sign-magnitude-metoden, som diskuteras nedan. Sign-Magnitude Representation Det finns många system för att representera negativa heltal med bitmönster. Ett schema är sign-magnitude. Den använder en bit (vanligtvis längst till vänster) för att indikera tecknet. 0 indikerar ett positivt heltal och 1 indikerar ett negativt heltal. Resten av bitarna används för storleken på numret. Så -24 10 representeras som: FRÅGA 12: Vilka positiva heltal kan representeras med 8-bitars teckenformatrepresentation, och vilka negativa heltal kan representeras? Problem med teckenstorlek Det finns problem med signifikansrepresentation av heltal. Låt oss använda 8-bitars sign-magnitude för exempel. Den vänstra biten används för tecknet, vilket lämnar sju bitar för storleken. Storleken använder 7-bitars unsigned binär, vilket kan representera 0 10 (som 000 0000) upp till 127 10 (som 111 1111). Den åttonde biten gör dessa positiva eller negativa, vilket resulterar i -127 10. -0, 0. 127 10. Ett mönster motsvarar minus noll, 1000 0000. En annan motsvarar plus noll, 0000 0000. Det finns flera problem med sign-magnitude. Det fungerar bra för att representera positiva och negativa heltal (även om de två nollorna är störande). Men det fungerar inte bra i beräkningen. En bra representation metod (för heltal eller för något) måste inte bara kunna representera objekt av intresse, men måste också stödja operationer på dessa objekt. Detta är vad som är fel med romerska siffror: de kan representera positiva heltal, men de är mycket dåliga när de används i beräkningen. FRÅGA 13: Kan binäradditionsalgoritmen användas med sign-magnitude representation Försök lägga till 16 med -24: Signerade binära nummer Men när vi hanterar negativa tal använder vi ett - ve-tecken framför numret för att visa att numret är negativ i värde och skiljer sig från ett positivt osignerat värde, och detsamma är sant med signerade binära nummer. Men i digitala kretsar finns det ingen avsättning att sätta ett plus eller till och med ett minustecken till ett tal, eftersom digitala system fungerar med binära tal som representeras i form av 822008217s8221 och 822018217s8221. När de används tillsammans i mikroelektronik faller dessa 822018217s8221 och 822008217s8221, en bit (som är en sammandragning av Binary digiT), i flera radstorlekar av nummer som refereras till av vanliga namn, såsom en byte eller ett ord. Vi har också tidigare sett att ett 8-bitars binärt tal (en byte) kan ha ett värde som sträcker sig från 0 (00000000 2) till 255 (11111111 2), det är 2 8 256 olika kombinationer av bitar som bildar en enda 8-bit byte . Så till exempel ett osignerat binärt nummer som: 01001101 2 64 8 4 1 77 10 i decimal. Men digitala system och datorer måste också kunna använda och manipulera negativa tal samt positiva tal. Matematiska tal består i allmänhet av ett tecken och ett värde (storlek) där tecknet anger huruvida numret är positivt, () eller negativt, () med värdet som indikerar storleken på numret, till exempel 23, 156 eller - 274. Presenterande nummer är detta sätt kallas 8220sign-magnitude8221 representation eftersom den vänstra mest siffran kan användas för att indikera tecknet och de återstående siffrorna storleken eller värdet av numret. Sign-magnitude notation är den enklaste och en av de vanligaste metoderna för att representera positiva och negativa tal vardera sidan av noll, (0). Således erhålls negativa tal enkelt genom att ändra tecknet på motsvarande positiva tal eftersom varje positivt eller osignerat tal kommer att ha ett signerat motsats, exempelvis 2 och -2, 10 och -10, etc. Men hur representerar vi signerade binära tal om allt vi har är ett gäng one8217s och zero8217s. Vi vet att binära siffror eller bitar bara har två värden, antingen en 822018221 eller en 822008221, och bekvämt ett tecken har också bara två värden, en 8220 8221 eller en 8220 8220. Då kan vi använda en enda bit för att identifiera tecknet på ett signerat binärt nummer. Så för att representera ett positivt (N) och ett negativt (-N) binärt tal kan vi använda binära tal med tecken. För signerade binära tal används den mest signifikanta biten (MSB) som tecknet. Om teckenbiten är 822008221 betyder det att numret är positivt. Om teckenbiten är 822018221 är numret negativt. De återstående bitarna används för att representera storleken på det binära numret i det vanliga unsigned binära talformatet. Då kan vi se att Sign-and-Magnitude (SM) - notationen lagrar positiva och negativa värden genom att dividera 8220n8221 totala bitarna i två delar: 1 bit för tecknet och n1 bitarna för värdet som är ett rent binärt tal. Till exempel kan decimaltalet 53 uttryckas som ett 8-bitars signerat binärt tal enligt följande. Positivt signerade binära nummer Negativa signerade binära nummer Nackdelen här är att medan vi hade ett n-bit unsigned binärt tal har vi nu ett n-1 bitars signerat binärt tal som ger ett antal siffror från: - (2 (n-1) ) till (2 (n-1) 8211 1) Så till exempel: Om vi har 4 bitar för att representera ett signerat binärt tal, (1-bit för Sign-bit och 3-bitar för magnitudbitarna) av siffror som vi kan representera i teckenstorlek notation skulle vara: - (2 (4-1)) till (2 (4-1) 8211 1) -2 (3) till 2 (3) 8211 1 innan av ett osignerat 4-bitars binärt tal skulle ha varit från O till 15. eller O till F i hexadecimal. Med andra ord har unsigned binär aritmetik inte en teckenbit, och kan därför ha ett större binärt intervall eftersom den mest signifikanta biten (MSB) bara är en extra bit eller siffra snarare än en teckenbit. Signerade binära nummer Exempel No1 Konvertera följande decimala värden till signerade binära siffror med teckenformatformatet: -15 10 som ett 6-bitars nummer Observera att för en 4-bitars, 6-bitars, 8-bitars, 16-bitars eller 32-bitars tecknat binärt tal måste alla bitarna MÅSTE ha ett värde. Därför används 822008217s8221 för att fylla mellanrummen mellan den vänstra teckenbiten och det första eller högsta värdet 822018221. Teckenförstoringsrepresentationen av ett binärt tal är en enkel metod att använda och förstå för att representera signerade binära siffror, eftersom vi hela tiden använder systemet med normal decimal (bas 10) i matematik. Lägga till en 822018221 på framsidan om binärnumret är negativt och en 822008221 om det är positivt. Med hjälp av denna sign-magnitude-metoden kan emellertid möjligheten att två olika bitmönster ha samma binära värde. Till exempel skulle 0 och -0 vara 0000 respektive 1000 som ett signerat 4-bitars binärt tal. Så vi kan se att med denna metod kan det finnas två representationer för noll, en positiv noll (0 000 2) och även en negativ noll (1 000 2) som kan orsaka stora komplikationer för datorer och digitala system. One8217s komplement till ett signerat binärt nummer One8217s komplement eller 18217s komplement som det också kallas är en annan metod som vi kan använda för att representera negativa binära tal i ett signerat binärt talningssystem. I ett8217s-komplementet förblir positiva tal (även kända som icke-komplement) oförändrade som tidigare med teckenstorlekarna. Negativa siffror är dock representerade genom att använda one8217s-komplementet (inversion, negation) av det osignerade positiva numret. Eftersom positiva tal alltid börjar med en 822008221 börjar komplementet alltid med en 822018221 för att indikera ett negativt tal. En8217-komplementet till ett negativt binärt tal är komplementet till dess positiva motsvarighet, så för att ta dem komplement till ett binärt tal behöver vi bara ändra varje bit i sin tur. Således är komplementet till 822018221 822008221 och vice versa, då är komplementet till 10010100 2 helt enkelt 01101011 2 eftersom alla 18217s ändras till 08217s och 08217s till 18217s. Det enklaste sättet att hitta ett8217-komplementet av ett signerat binärt nummer när man bygger digitala aritmetiska eller logiska dekoderkretsar är att använda inverterare. Inverteraren är naturligtvis en komplementgenerator och kan användas parallellt för att hitta 18217-komplementet av något binärt tal som visas. 18217s komplement med inverterare Då kan vi se att det är väldigt lätt att hitta de komplement till ett binärt tal N eftersom allt vi behöver göra är att helt enkelt ändra 1s till 0s och 0s till 1s för att ge oss en - N-ekvivalent. I likhet med den tidigare teckenförstoringsrepresentationen kan ett8217-komplementet också ha en bitnotation som representerar antal i intervallet från: -2 (n-1) och 2 (n-1) 8211 1. Till exempel kan en 4- bitrepresentation i komplementformatet kan användas för att representera decimaltal i intervallet från -8 till 7 med två representationer av noll: 0000 (0) och 1111 (-0) samma som tidigare. Tillägg och subtraktion med One8217s komplement En av de största fördelarna med One8217s Complement är i addition och subtraktion av två binära tal. I matematik kan subtraktion implementeras på olika sätt, eftersom A B. är densamma som att säga A (-B) eller - B A etc. Därför kan komplikationen att subtrahera två binära tal utföras genom att helt enkelt använda tillsats. Vi såg i binäradderhandledningen att binär addition följer de samma reglerna som för den normala tillsatsen, förutom att det i binärt finns endast två bitar (siffror) och den största siffran är en 822018221, (precis som 822098221 är den största decimalsiffran) De möjliga kombinationerna för binär tillsats är följande: När de två siffrorna som ska läggas till är båda positiva, kan summan A B. de läggas till tillsammans med direkt summan (inklusive tal och bittecken), eftersom när enstaka bitar läggs samman, 82200 08221, 82200 18221 eller 82201 08221 resulterar i summan av 822008221 eller 822018221. Detta beror på att när de två bitarna vi vill läggas till är odd (822008221 822018221 eller 82201 08221), är resultatet 822018221. På samma sätt när de två bitarna som läggs till är jämn (82200 08221 eller 82201 18221) är resultatet 822008221 tills du kommer till 82201 18221 då summan är lika med 822008221 plus en bära 822018221. Let8217s tittar på ett enkelt exempel. Subtraktion av två binära nummer Ett 8-bitars digitalt system krävs för att subtrahera följande två nummer 115 och 27 från varandra med hjälp av ett8217s komplement. Så i decimal skulle detta vara: 115 8211 27 88. Först måste vi konvertera de två decimaltalarna till binära och se till att varje nummer har samma antal bitar genom att lägga till ledande noll8217s för att producera ett 8-bitars nummer (byte). Därför: 115 10 i binär är: 01110011 2 27 10 i binär är: 00011011 2 Nu behöver vi hitta komplementet till det andra binära numret, (00011011) medan du lämnar det första numret (01110011) oförändrat. Så genom att ändra alla 18217s till 08217s och 08217s till 18217s, är ett8217s-komplementet till 00011011 därför lika med 11100100. Lägga till det första numret och komplementet till det andra numret ger: Överflöde 1 01010111 Eftersom det digitala systemet ska fungera med 8 bitar används endast de första åtta siffrorna för att svara på summan och vi ignorerar helt enkelt den sista biten (bit 9). Denna bit kallas en 8220overflow8221 bit. Överflöde uppstår när summan av den mest signifikanta (vänster) kolumnen ger en framflyttning. Denna överflöde eller bärbiten kan ignoreras helt eller skickas till nästa digitala sektion för användning i dess beräkningar. Överflöde indikerar att svaret är positivt. Om det inte finns någon överflöde är svaret negativt. 8-bitarsresultatet från ovan är: 01010111 (överskottet 822018221 avbryter) och konvertera det från ett ett8217s komplementsvar till det verkliga svaret måste vi nu lägga till 822018221 till kompletteringsresultatet one8217s därför: Så resultatet av att subtrahera 27 (000110112) från 115 (01110011 2) med 18217s komplement i binär ger svaret på: 01011000 2 eller (64 16 8) 88 10 i decimal. Då kan vi se att signerade eller osignerade binära nummer kan subtraheras från varandra med hjälp av One8217s Complement och tilläggsprocessen. Binära tillägg som TTL 74LS83 eller 74LS283 kan användas för att lägga till eller subtrahera två 4-bitars signerade binära nummer eller kaskad ihop för att producera 8-bitars tillägg kompletta med utmatning. Two8217s komplement till ett signerat binärt nummer Two8217s komplement eller 28217s komplement som det också kallas är en annan metod som den tidigare teckenstorleken och one8217s komplementform som vi kan använda för att representera negativa binära tal i ett signerat binärt talningssystem. I två8217-komplementet är de positiva siffrorna exakt samma som tidigare för osignerade binära tal. Ett negativt tal representeras emellertid av ett binärt tal, vilket när det läggs till motsvarande positiva ekvivalenta resultat i noll. I två8217s komplementform är ett negativt tal 28217-komplementet av dess positiva tal med subtraktionen av två tal som ABA (28217s komplement av B) med användning av mycket samma process som tidigare, eftersom i princip två8217s-komplementet är ett8217s komplement 1. Den största fördelen av två8217s komplement över det föregående one8217s komplementet är att det inte finns något dubbel nollproblem plus det är mycket lättare att generera två-komplementet av ett signerat binärt tal. Därför är aritmetiska operationer relativt lättare att utföra när siffrorna representeras i två-komplementformatet. Let8217s tittar på subtraktionen av våra två 8-bitars nummer 115 och 27 ovanifrån med hjälp av two8217s-komplementet, och vi kommer ihåg ovanifrån att de binära ekvivalenterna är: 115 10 i binär är: 01110011 2 27 10 i binär är: 00011011 2 Våra nummer är 8 bit långa, då finns det 2 8 siffror tillgängliga för att representera våra värden och i binärt motsvarar detta: 100000000 2 eller 256 10. Därefter kompletteras två8217-komplementet med 27 10: (2 8) 2 00011011 100000000 00011011 11100101 2 Komplementeringen av det andra negativa talet betyder att subtraktionen blir en mycket enklare tillägg av de två talen så därför är summan 115: 28217s komplement av 27) som är: 01110011 11100101 1 01011000 2 Som tidigare ignoreras den 9: e överflödsbiten eftersom vi endast är intresserade av de första 8 bitarna, så resultatet är: 01011000 2 eller (64 16 8) 88 10 i decimal samma som tidigare. Sammankopplade binära tal Sammanfattning Vi har sett att negativa binära tal kan representeras genom att använda den mest signifikanta biten (MSB) som en teckenbit. Om ett binärt nummer n är undertecknat används den vänstra biten för att representera tecknet som lämnar n-1 bitar för att representera numret. Till exempel, i ett 4-bitars binärt tal, lämnar detta bara 3 bitar för att hålla det faktiska numret. Om emellertid binärtalet är osignerat kan alla bitarna användas för att representera numret. Representationen av ett signerat binärt tal benämns vanligen signaturmagnetnotationen och om teckenbiten är 822008221 är numret positivt. Om teckenbiten är 822018221 är numret negativt. När man arbetar med binära aritmetiska operationer är det mer lämpligt att använda komplementet till det negativa talet. Komplementering är ett alternativ för att representera negativa binära tal. Detta alternativa kodningssystem möjliggör subtraktion av negativa tal med hjälp av enkel tillsats. Eftersom positiva teckenstorlekar börjar alltid med noll (0) börjar komplementet därför alltid med en (1) för att ange ett negativt tal som visas i följande tabell. 4-bitars signerad binär taljämförelse Signerade komplementformer av binära tal kan använda antingen 18217s komplement eller 28217s komplement. 18217-komplementet och 28217-komplementet av ett binärt tal är viktiga eftersom de tillåter representation av negativa tal. Metoden för 28217s komplementräknik används vanligen i datorer för att hantera negativa tal. Det enda nackdelen är att om vi vill representera negativa binära tal i det signerade binära talformatet måste vi ge upp något av intervallet av det positiva tal som vi hade tidigare . Tidigare inmatningsimpedans för en förstärkare Nästa Varistor-handledning Övriga handledning i binära nummer 27 Kommentarer Delta i konversationsfelet Var god fyll i alla fält. Andra handledning i binära nummer 15 januari 2016 Binärt kodad decimal eller BCD som det vanligtvis kallas, är en annan process för att konvertera decimal. 15 jan 2016 Det finns olika likvärdiga binära numreringssystem som används i digitala elektroniska kretsar och datorer. Grunderna för annonsörer Aspencore Network Connect med oss Allt innehåll är upphovsrätt kopia 2016 av AspenCore, Inc. Alla rättigheter reserverade.
Comments
Post a Comment