Omvänd kod ( engelsk ones' complement ) är en metod för beräkningsmatematik som låter dig subtrahera ett tal från ett annat genom att bara använda additionsoperationen på naturliga tal . Tidigare användes metoden i mekaniska räknare ( arithometrar ). Många tidiga datorer, inklusive CDC 6600 , LINC , PDP-1 och UNIVAC 1107 , använde en omvänd kod. De flesta moderna datorer använder tvås komplement .
Den omvända n -bitars binära koden för ett positivt heltal består av en enbits teckenkod (binär siffra 0) följt av en ( n −1)-bitars binär representation av talets modul (omvänd koden för ett positivt tal är samma som den direkta koden).
Exempel. Den binära representationen av talet 5 är 101. Den 10-bitars binära koden för talet +5 är 00 0000 0101 .
Den omvända n -bitars binära koden för ett negativt heltal består av en enbits teckenkod (binär siffra 1) följt av ett ( n −1)-bitars binärt tal, vilket är den inverterade ( n −1)-bitars representation av talets modul. Det bör noteras att för att ändra tecknet för ett tal räcker det att invertera alla dess siffror, oavsett om det är en teckensiffra eller en informationssiffra.
Exempel. Den binära representationen av talet 5 är 101, dess 10-bitars binära representation är 00 0000 0101 . Den reciproka 10-bitars binära koden för -5 är 11 1111 1010 .
Inverteringsoperationen används också för att omvandla ett negativt tal till ett positivt. Dessa returkoder är bekväma att använda. Som en nackdel bör det noteras att det i omvända binära koder finns två koder för talet 0: "positiv noll" 00 0000 0000 och " negativ nolla " 11 1111 1111 (10-bitars omvända koder ges). Detta leder till en viss komplikation av summeringsoperationen. Därför bytte vi i framtiden till ytterligare koder för att skriva signerade heltal.
En N -bitars omvänd kod låter dig representera tal från −(2 N−1 −1) till 2 N−1 −1, och en extra kod - från −2 N−1 till 2 N−1 −1.
Komplementmetoden används främst i det binära talsystemet (bas 2 10 ). I det binära systemet erhålls ens komplement ( omvänd kod ) mycket enkelt genom att invertera varje bit (ersätter "0" med "1" och vice versa). Tvås komplement (2 :s komplement ) kan erhållas från ens komplement (omvänd kod) genom att lägga till en till den minst signifikanta siffran (biten). [1] Betrakta till exempel subtraktionen av två heltal: 100 10 − 22 10 . Varje nummer skrivs som en 8-bitars kod, medan den viktigaste, den 8:e biten, anses vara ett tecken.
0110 0100 2 ( x lika med decimal 100 10 ) − 0001 0110 2 ( y lika med decimal 22 10 )i additionsmetoden blir summan:
0110 0100 2 ( x ) + 1110 1001 2 (första komplementet y ) + 1 2 (för att få det andra komplementet) ————————————— 1 0100 1110 2Efter att ha förkastat den nionde (mest signifikanta, vänster) biten är svaret: 0100 1110 2 (detta är ett positivt tal lika med decimal 78 10 ).