PDA

Visualizza la versione completa : [C] Convertire un numero in base 2


simone_90
17-10-2007, 17:32
come faccio a fare una procedura che dato un numero me lo converta in base 2
grazieeeeeeeeeeeeeee

oregon
17-10-2007, 18:57
Come faresti con "carta e penna"?

simone_90
17-10-2007, 19:28
Dato N chiedi e' dispari ? se si scrivi 1 altrimenti scrivi 0
poi prendi N/2 (solo la parte intera) chiedi e' dispari? se si scrivi 1 altrimenti scrivi 0
continua a dimezzare finche' non arrivi a 1 o 0
Avevo in mente
void convert2bin(int num)
{
int mask = 0x80000000; // inizializzi la maschera

while(mask > 0)
{
printf("%c",
(num & mask) ? 1 : 0);
mask = mask >> 1;
}
}

Xaratroom
17-10-2007, 20:00
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

int main()
{
int valore;
cout<<"\nInserisci il numero da convertire: "<<endl;
cin>>valore;
cout<<"\nIl numero convertito in base 2 e': "<<endl;
for (int j = 8*sizeof(int); j >= 0; j--)
cout << (bool)(valore&((int)pow(2,j)));
cout << endl << endl;
system("pause");
return 0;
}

Trascura la pow, che altro non fa che ottenere tutte le potenze di 2 ...
Guarda la sizeof ...
(sizeof (int)*8) ti consente di ottenere il numero di bit ...
(sizeof restituisce il numero di byte)...
Prova con: int mask = pow(2,sizeof(int)*8);
Poi stampi un numero come carattere -_-" (0x30 -> 0, 0x31 -> 1)...

MItaly
17-10-2007, 20:34
(tra parentesi, invece di pow(2,j) usa 1<<j)

MacApp
17-10-2007, 21:59
Originariamente inviato da Xaratroom


#include <iostream>
/* omissis */
using namespace std;

int main()
{
/* omissis */
cout<<"\nInserisci il numero da convertire: "<<endl;
cin>>valore;
cout<<"\nIl numero convertito in base 2 e': "<<endl;
for (int j = 8*sizeof(int); j >= 0; j--)
cout << (bool)(valore&((int)pow(2,j)));
cout << endl << endl;
/* omissis */
}


non č C ;-)

Xaratroom
17-10-2007, 23:08
Giusto quello che scrive MItaly, perchč meno dispendioso ...

non č C ;-)


...
printf("\nInserisci il numero da convertire: \n");
scanf ("%d ",valore);
printf("\nIl numero convertito in base 2 e': \n");
...

Il tipo di dato bool puņ contenere solo i valori logici 0 e 1 ...
Al posto del casting bool puoi inserire l'operatore ternario, come hai fatto nel tuo codice, la variabile j non puņ essere dichiarata nel for ...

Loading