1 pièce(s) jointe(s)
Conversion Décimal -> Binaire 32 Bits
Bonjour à tous!
Je viens de découvrir se Forum par le biais d'un camarade qui a sollicité votre aide et a obtenu une réponse rapide et très pertinente!
Je vous explique: Je code une calculatrice avec le Lycée.
J'en suis arrivé a convertir du décimal en binaire. La conversion marche parfaitement lorsque je passe du décimal 32 bits au Binaire 16 ou 8 bits.
Par contre lorsque j'essaye de passer du décimal 32 bits au binaire 32 bits j'ai des valeurs fausses..
Précisions:
-Variable bits initialisée a 32.
Voila le code de ma fonction de conversion Décimal vers Binaire:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| void DecVersBin()
{
int a=(int)Form1->Edit1->Text.ToDouble();
int i, masque;
Form1->Edit1->Clear();
for(i=0;i<bits;i++)
{
if(bits==32)
{
masque=0x80000000;
}
if(bits==16)
{
masque=0x8000;
}
if(bits==8)
{
masque=0x80;
}
if((a&(masque>>i))==0)
{
Form1->Edit1->Text=Form1->Edit1->Text+'0';
}
else
{
Form1->Edit1->Text=Form1->Edit1->Text+'1';
}
}
} |
Voila le code de ma ComboBox pour choisir les bits:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| void __fastcall TForm1::ComboBox3Change(TObject *Sender)
//OnChange de la ComboBox 32/16/8 bits
{
if(Form1->ComboBox3->Text=="32 bits")
{
bits=32;
}
if(Form1->ComboBox3->Text=="16 bits")
{
bits=16;
}
if(Form1->ComboBox3->Text=="8 bits")
{
bits=8;
}
if (ComboBox2->Text=="Héxadécimal" && ComboBox3->Text=="32 bits")
{
if(bits==16)
{
Form1->Edit1->Text="0000"+Form1->Edit1->Text.SubString(1,4);
bits=32;
}
else if(bits==8)
{
Form1->Edit1->Text="000000"+Form1->Edit1->Text.SubString(1,2);
bits=32;
}
}
if (ComboBox2->Text=="Héxadécimal" && ComboBox3->Text=="16 bits")
{
if(bits==32)
{
Form1->Edit1->Text=Form1->Edit1->Text.SubString(5,4);
bits=16;
}
else if(bits==8)
{
Form1->Edit1->Text="00"+Form1->Edit1->Text.SubString(1,2);
bits=16;
}
}
if (ComboBox2->Text=="Héxadécimal" && ComboBox3->Text=="8 bits")
{
if(bits==32)
{
Form1->Edit1->Text=Form1->Edit1->Text.SubString(7,2);
bits=8;
}
else if(bits==16)
{
Form1->Edit1->Text=Form1->Edit1->Text.SubString(3,2);
bits=8;
}
}
} |
Voila le code de ma ComboBox pour choisir Décimal / Hexa / Bin:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| void __fastcall TForm1::ComboBox2Change(TObject *Sender)
//OnChange de la ComboBox Déc/Hex
{
if (ComboBox2->Text=="Décimal" && base=='H')
{
HexVersDec();
base='D';
}
/*if (ComboBox2->Text=="Décimal" && base=='B')
{
BinVersDec();
base='D';
}*/
if (ComboBox2->Text=="Héxadécimal" && base=='D')
{
DecVersHex();
base='H';
}
/*if (ComboBox2->Text=="Héxadécimal" && base=='B')
{
BinVersHex();
base='H';
}*/
if (ComboBox2->Text=="Binaire" && base=='D')
{
DecVersBin();
base='B';
}
/*if (ComboBox2->Text=="Binaire" && base=='H')
{
HexVersBin();
base='B';
}*/
} |
Par exemple pour convertir 9 en binaire j'obtient:
en 32 bits: 00000000000000000000000000001111
en 16 bits: 0000000000001001
en 8 bits: 00001001
Petit Sceen d'ensemble:Pièce jointe 128652
Merci d'avance pour votre aide précieuse.