Binary och decimal är två olika sätt att representera heltal . I C -programmering , är binära tal oftast lagras i teckensträngar eller någon annan typ av array . Teckensträngar på C benämnes genom en karaktär pekare som pekar på den låga ordningens bit hos den binära strängen. Strängen avslutas med den speciella C- tecknet " \\ 0 " efter högorderbit . Konvertera dessa binära strängar till motsvarande heltal är ett enkelt program för att skriva - antingen iterativt eller rekursivt . Instruktioner
1
Utveckla en tydlig algoritm för konvertering innan du börjar skriva kod . Du behöver två variabler för algoritmen : en ackumulator att hålla reda på resultaten och en " power " variabel att hålla reda på den ökande kraften av två som beskriver de olika bitpositioner i det binära talet . Till exempel är heltalet 13 lagrad i binär som 1101 . Detta antal är faktiskt ( 1 X 2 ^ 3 ) + ( 1 X 2 ^ 2 ) + ( 0 X 2 ^ 1 ) + ( 1 X 2 ^ 0 ) eller 8 + 4 + 0 + 1 = 13 . På grund av hur binära siffror lagras i C , kommer vi att starta på låga ordning lite och multiplicera varje bit av ökande värden på strömmen variabel och lägga den i ackumulatorn .
2
Beskriv funktionen i pseudokod , testa pseudokoden med några exempel , justera pseudokoden om nödvändigt och skriva C-kod direkt från pseudokod . Funktion namn : binary2integer . Ingång: en pekare till en teckentyp. Utgång ett heltal . Starta funktionen genom att definiera två heltalsvariabler : acc - en ackumulator och pow - ett värde som dubblerar vid varje steg i konverteringen . Ställ enl 0 och pow till 1 . Fortsätt att göra de tre uttalanden i slingan tills visaren pekar på " \\ 0 " tecken , sedan tillbaka värdet av acc som värdet av funktionen . De tre slingvillkor är : Om visaren pekar på en " 1 , " lägga till värdet av pow till acc , fördubbla värdet av pow och inkrement pekaren för att peka på nästa bit
. 3
Konvertera pseudokoden till C -kod : int binary2integer ( char * p ) { int acc , pow , ACC = 0; pow = 1 , medan ( p * = ' \\ 0 ' ! ) {if ( p * == '1 ' ) ACC + = pow , pow * = 2 , p + + } retur acc } . Denna kod bör testas med flera exempel . Var noga med att kontrollera att gränsvärden som 0 och 1 , samt med en mängd olika värden såsom 11111 , 00000 , 10101 och 01010 . Addera