Gå til innhold

Konvertere desimaltall til binærtall


Anbefalte innlegg

Videoannonse
Annonse
Tja, hva er du ute etter? Trenger å vite et par ting:

- Hva er inputen: float, double, char* fra stdio?

- Hva mener du med 8 bits binærtall? Du kan lagre tallet som et heltall (int) å skrive det ut som binær. Eller du kan lagre tallet som char, som vanligvis tar 8 bit i minnet.

uhm...tja :dontgetit:

er veldig ny i C, eller programmering generelt, så det du spør om aner jeg ikke svaret på :p. 8 bits binærtall; er ikke det feks 10010110? altså 8 siffer? mulig jeg er helt på jordet her og.

Lenke til kommentar
er veldig ny i C, eller programmering generelt, så det du spør om aner jeg ikke svaret på :p. 8 bits binærtall; er ikke det feks 10010110? altså 8 siffer? mulig jeg er helt på jordet her og.

Jo, men det er ikke sikkert du trenger å konverterer noe. Alle data er lagret i binærformat, så det er jo bare å representere dem som binære tall. Et heltall kan skrives som tall eller hex verdi med printf(). Binærtall går ikke an (etter hva jeg har sett).

Lenke til kommentar

Eksempel som konverterer uten bruk av / eller %.

 

#include <stdio.h>

typedef char binstring[9];

void uc2bin1(unsigned char tall,binstring s){
int i;
for (i=128;i>0;i>>=1) *s++=((tall&i)!=0)+'0';
*s=0;
}

int main(){
unsigned char tall=154;
binstring b;
uc2bin1(tall,b);
printf("%i : %s\n",tall,b);
return 0;
}

Logikken: Utfører logisk and med 10000000, 01000000, 00100000 osv. Hvis den logiske operasjonen resulterer i et tall != 0 så legges '1' i strengen. Hvis ikke '0'. Etter hver operasjon så flyttes pekeren som peker på hvor i strengen vi er.

 

+'0' utnytter det faktum at '1' følger etter '0' i ASCII alfabatet.

Lenke til kommentar

void uc2bin2(unsigned char tall,binstring s){
int i=8;
for (s[i]=0;i-->0;tall>>=1) s[i]=(tall&1)+'0';
}

Liten forbedring, færre operasjoner. :yes:

 

Edit: uc2bin1 og uc2bin2 bygger opp strengen i forskjellig retning. 1 fra venstre mot høyre, og 2 fra høyre mot venstre. Logikken fra 1 kan derfor brukes til direkte utskrift.

Endret av JBlack
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...