PDA

Visualizza la versione completa : [C] Conversione da base 10 a base 2


informatici
21-04-2008, 11:29
ciao ragazzi... mi serve una mano...
vi scrivo il testo dell'esercizio...

E' richiesto di scrivere 2 funzioni per la conversione da base 10 a base
2 e viceversa.
1) void dec2bin(unsigned short input, char bitstring[16])
Memorizza la rappresentazione binaria di input nel vettore
bitstring. Il bit meno significativo è memorizzato in bitstring[0].
I valori di input sono interi unsigned a 16 bit (ovvero limitati
all'intervallo [0;2161]).
2) unsigned short bin2dec(char bitstring[16])
Ha come valore di ritorno la rappresentazione decimale di bitstring.
Il bit meno significativo è memorizzato in bitstring[0].
NB:
Il vettore di caratteri bitstring NON è una stringa di caratteri, perché non è presente il
carattere di terminazione ‘\0’. Non si possono quindi utilizzare su questo vettore le
funzioni di manipolazione delle stringhe (strcpy, strcat, ecc.).
Qualsiasi implementazione alternativa verrà considerata errata!!!

La difficoltà nsta nel fatto che per eseguirlo non posso fare la divisioneper 2 ma devo utilizzare lo shift e le maschere che non so usare. potete darmi una mano voi? Vi ringrazio di cuore.

oregon
21-04-2008, 11:33
Cosa non capisci dello shift ?

informatici
21-04-2008, 11:39
Non so come si usa e nemmeno in che ambito, di C so solo le basi...

oregon
21-04-2008, 11:41
Beh ... la prima potrebbe essere



void dec2bin(unsigned short input, char bitstring[16])
{
int i;

for(i=0; i<16; i++, input>>=1)
bitstring[i] = '0' | (input & 1);
}


... per la seconda, provaci tu ...

informatici
21-04-2008, 11:45
Ok grazie ora provo a fare il programma e vediamo un po'

informatici
21-04-2008, 14:32
#include <stdio.h>
int main()
{
unsigned short a,b,c,d,e;
a = 0;
b = 1;
c = 2;
d = 3;
e = 4;
char bitstring[16];
dec2bin(a,bitstring[16]);
dec2bin(b,bitstring[16]);
dec2bin(c,bitstring[16]);
dec2bin(d,bitstring[16]);
dec2bin(e,bitstring[16]);
}
void dec2bin(unsigned short input, char bitstring[16])
{
int i;
for(i=0; i<16; i++, input>>=1)
bitstring[i] = '0' | input & 1);
}
Il programma mi da un errore sulla prima parentesi graffa nella dichiarazione della funzione come mai?

Stoicenko
21-04-2008, 14:44
trascrivi l'errore..

ps: questo è sbagliato



void dec2bin(unsigned short input, char bitstring[16])
{
int i;
for(i=0; i<16; i++, input>>=1)
bitstring[i] = '0' | input & 1);
}



questo meno



void dec2bin(unsigned short input, char bitstring[])
{
int i;
for(i=0; i<16; i++, input>=1)
bitstring[i] = '0' | input & 1);
}

informatici
21-04-2008, 14:46
Errore trovato!

informatici
21-04-2008, 14:50
Come si fa la funzione per questa richiesta?
2) unsigned short bin2dec(char bitstring[16])
Ha come valore di ritorno la rappresentazione decimale di bitstring.
Il bit meno significativo è memorizzato in bitstring[0].
utilizzando gli shift e le maschere?

oregon
21-04-2008, 14:53
@Stoicenko

questo

input>>=1

è giustissimo ... semmai è sbagliata la tua correzione ...


@informatici

Devi richiamare la funzione nel main con

dec2bin(a, bitstring);

e dichiararla in testa ...

Loading