Besoin d'aide Langage binaire et héxadécimale

Fermé
Danielle Paquet - 1 oct. 2001 à 22:58
saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011 - 21 janv. 2009 à 16:42
Comment faire pour convertir le nombre hexadécimale 191 en base décimale et 256 en nombre décimale.

Je ne comprend pas. J'aimerais avoir le détail de la réponse et explication .
Danielle qui est décourager pour son devoir d'informatique.
A voir également:

16 réponses

olé, quel vaste sujet que le codage de valeurs dans différentes bases !

bon, je vais essayer de t'aider un peu. :)

1. Il vaut bien faire la distinction entre une valeur et sa représentation. Pour représenter une valeur, on utilise des chiffres. Le chiffre de gauche est dit "de poids fort", celui de droite est dit "de poid faible". Cela signifie qu'un même chiffre (représentation) aura une valeur plus forte à gauche qu'à droite. Le rapport de valeur entre deux chiffres juxtaposés est appelé la base. Soit une représentation Aa (où A et a sont deux chiffres) dans la base b, A possède b-fois plus de valeur que a. Un exemple concret : dans le nombre 11, il y a deux signes identique (1 et 1). Si on est en base 10, le 1 de gauche a 10 fois plus de valeur que le 1 de droite. Pour calculer la valeur de la représentation "11", on fait 1*10 + 1 = 11. Il est à noté que la valeur est notée ... en base 10, puique qu'il faut bien la représenter d'une manière ou d'une autre . De même la base est notée en base 10.

2. Pour connaitre la valeur réelle d'un nombre, on applique la méthode vu précédemment, et dont Mister BeeGee parle.
Soit la représentation XYZ en base b : valeur = X*b^2 + Y*b^1 + Z*b^0. La valeur est toujours notée en base 10 de sorte que valeur = représentation(10). Pour convertir une représentation, de n'importe quelle base en base 10, il suffit de connaitre sa valeur.
(voir la réponse de Mister BeeGee pour l'application pratique)

3. Pour convertir dans une autre base que la base 10, la méthode est quasi similaire. Il faut, dans un premier temps utiliser l'écriture : XYZ(b) => X*b^2 + Y*b^1 + Z*b^0 A partir de la, une solution simple consiste à convertir tous les éléments de cette expression dans la base de destination (écrire l'expression en puissances de la base). Un petit exemple : on veut convertir 191 de la base 16 à la base 2 : 191(16) => 1.16^2+9.16^1+1.16^0 = 2^0.(2^4)^2+(2^4+2^0).2^3+2^0.2^0 = 2^0.2^8+2^7+2^3+2^0 = 2^8+2^7+2^3+2^0 => 110010001(2)

4. Pour convertir de la base 10, vers n'importe quelle base, il suffit de diviser le nombre en base 10, par la base destination, puis de répéter la division avec le résultat de la division précédente, etc. Le résultat est la concaténation des restes de ces divisions successives, en les lisant dans l'ordre INVERSE. C'est l'exemple de ton livre. On veut convertir 57 de la base 10 à la base 16 :
57/16 = 3, reste 9
3/16 = 0, reste 3
donc 57(10) = 39(16)

5. Une petite astuce, pour éviter de se lancer dans des calcul pour rien. Un nombre binaire est noté du type 11110000. tu peux couper ce nombre en deux parties 1111 (poids fort) et 0000 (poids faible) chacune de ces parties correspond à un chiffre hexa (1111 : F, 0000 : 0) Donc la représentation de 11110000(2) est F0(16). Idem pour passer de la base 16 à la base 2.

Voila tu sais faire les convertions de base suivantes :
16 <-> 2 (par groupe de quatres bits)
b -> 10 (décomposer en puissances de 10)
10 -> b (diviser par b)
b -> C (décomposer en puissances de 10 puis convertir en puissances de c)

j'espère t'avoir aidé. Surtout n'ai pas peur si tu ne comprends pas tout dès le premier coup, c'est normal, c'est super abstrait comme sujet. Il faut que tu t'amuses à faire des convertions dans tous les sens, d'essayer plusieurs méthodes et surtout de garder en tête la distinction entre valeur et représentation de cette valeur.

it's you to play now ! :)

Yoann
4
eheh, non pas encore ... ;)

Souviens-toi : pour convertir n'importe quelle base en base 1O ( =base décimale), tu dois développer ta représentation en "somme de chiffres multipliés par la puissance de la base correspondant".

pour convetir 256 de la base 16 à la base 10 :

256(16) = 2.16^2 + 5.16^1 + 6.16^0
= 2.256 + 5.16 + 6
= 512 + 8 + 6
= 598(10)

C'est la même valeur représentée dans deux bases différentes.

De même pour convertir de la base 2 à la base 10

1010110000(2) = 1.2^9 + 0.2^8 + 1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 0.2^3 + 0.2^2 + 0.2^1 + 0.2^0
= 2^9 + 2^7 + 2^5 + 2^4
= 512 + 128 + 32 + 16
= 688(10)

idem, i l s'agit de la même valeur, mais utilisant deux représentation différentes

Essaie encore de faire des exercices, ça viendra petit à petit.
Ce n'est pas facile du premier coup et c'est normal car c'est super abstrait comme notion.

good luck
Yoann
3
Mister BeeGee
2 oct. 2001 à 08:19
Si c'est pas trop tard !

En système décimal :
2543 = (2*10^3)+(5*10^2)+(4*10^1)+(3*10^0)
^ signifie élévation à la puissance
en plus simple :
2543 = (2*1000)+(5*100)+(4*10)+(3)

En système hexadécimal
191 = (1*16^2)+(9*16^1)+(1*16^0)
en plus simple :
191 = (1*256)+(9*16)+(1)
1
pique Messages postés 7 Date d'inscription lundi 1 octobre 2001 Statut Membre Dernière intervention 1 novembre 2001
2 oct. 2001 à 14:37
Pourquoi dans mon livre le nombre 57 en hexadécimale converti en base décimale est 39
Il font 57/16=3+9
3/16=0+3
je ne comprends pas.

De plus convertir le nombre 11110000 binaire en base décimale

J'ai fais (1*2^7)+(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(0*2^2)+(0*2^1)+(0*2^0)=128+64+32+16
=240base 14
est-ce que ma base 14 est correcte j'ai fait le totale des base que est 22 -8=14 ???????
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 févr. 2006 à 13:13
Pour m'amuser un peu voilà ta question en binaire
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl
slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire
en binaire :
1110011 1101100 1110100 100000 1101010 1100001 1110101 1110010 1100001 1101001 100000 1110101 1101110 1100101 100000 1110001 1110101 1100101 1110011 1110100 1101001 1101111 1101110 100000 111010 1100101 1110011 1110100 1100011 1100101 100000 1110001 1110101 1100101 100000 1101100 100111 1101111 1101110 100000 1110000 1100101 1110101 1110100 100000 1110000 1100101 1110101 1110100 100000 1100101 1100011 1110010 1101001 1110010 1100101 100000 1110101 1101110 100000 1101101 1101111 1110100 100000 1100101 1101110 100000 1100010 1101001 1101110 1100001 1101001 1110010 1100101
Reconversion de ta question de binaire vers affichage normal : 
slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire
1
saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011
2 nov. 2008 à 13:29
merci lami20j

donc récapitulant pour une chaine de caractères il faut retourner tout les caractères en code ASCII puis convertir ces nombre en binaire .
est ce qu'il ya une fonction en c qui donne le code ASCII des caractères

merci bien
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011
2 nov. 2008 à 13:36
Salut,

Le langage C ne possède pas une fonction pour retourner le code ASCII d'un caractère.
Il suffit d'affecter un char à un int.
lami20j@debian:~/trash$ cat ccm5.c
#include<stdio.h>

int main()
{
        char c;
        int code;
        printf("Caractère? ");
        c=getchar();
        code=c;
        printf("%c : %d\n",c,code);
        return 0;
}

lami20j@debian:~/trash$ gcc ccm5.c
lami20j@debian:~/trash$ ./a.out
Caractère? A
A : 65
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011
2 nov. 2008 à 14:01
Re,

Voici un exemple en C
lami20j@debian:~/trash$ cat ccm6.c
#include<stdio.h>

void dec2bin(char *bin,int nb);

int main()
{
        char s[100],bin[32];
        char *p;
        int i;
        printf("Chaine? ");
        fgets(s,99,stdin);
        p=s;
        while (*p != '\n'){
                dec2bin(bin,*p);
                printf("%s",bin);
                ++p;
        }
        printf("\n");
        return 0;
}

void dec2bin(char *bin,int nb){
       int i,j,k,tmp;

       for(i=0;nb != 0;nb >>= 1){
               if(nb & 01)
                       bin[i++] = '1';
               else
                       bin[i++] = '0';
       }
       bin[i]='\0';

       for(j=0,k=i-1;j<k;++j,--k){
               tmp=bin[j];
               bin[j]=bin[k];
               bin[k]=tmp;
       }
}

lami20j@debian:~/trash$ gcc ccm6.c
lami20j@debian:~/trash$ ./a.out
Chaine? Le mots rom1 en binaire
100110011001011000001101101110111111101001110011100000111001011011111101101110001100000110010111011101000001100010110100111011101100001110100111100101100101
lami20j@debian:~/trash$


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pique Messages postés 7 Date d'inscription lundi 1 octobre 2001 Statut Membre Dernière intervention 1 novembre 2001
2 oct. 2001 à 17:53
Je commence à comprendre, j'apprécie tes explications
57/16 = 3, reste 9 ou trouves -tu le 9???????????
3/16 = 0, reste 3
donc 57(10) = 39(16)
Alors 191 en décimale converti en hexadécimal serait
191/16=11 comment trouver le reste????

Danielle
0
Bobinours Messages postés 2898 Date d'inscription jeudi 26 avril 2001 Statut Membre Dernière intervention 21 mars 2013 504
3 oct. 2001 à 03:29
D'après moi, soit ils se sont trompés dans ton livre, soit tu as mal lu.
C'est l'inverse. 57 DECIMAL -----donne-----> 39 DECIMAL
Pour vérifier, tu prends ta calculette (t'es sous Windows j'espère), tu la passes en mode scientifique. Ensuite tu cliques sur DEC (decimal par défaut). Rentre 57 puis cliques sur HEX... ça donne 39.

Non, ce n'est pas en base 14.
Le procédé (1*x^7)+(1*x^6)+(1*x^5)+(1*x^4)+(0*x^3)+(0*x^2)+(0*x^1)+(0*x^0) permet de transformer de la base x vers la base 10 (décimal). Je n'ai pas compris d'où sort le calcul 22-8=14 ?

-= Bobinours =-
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 févr. 2006 à 13:06
Re,

Une petite modification pour enlever les 00000... au début qui ne servent à rien.
J'ai modifié les 2 fonctions.
#! /usr/bin/perl

use warnings;
use strict;

#Description: conversion binaire/décimal & décimal/binaire
# décimal en binaire
sub dec2bin {
  my$bin = unpack ("B32", pack("N",shift));
  $bin =~ s/^0+(?=\d)//g;
  return $bin;
}

# binaire en décimal
sub bin2dec {
  return unpack("N", pack("B32",substr("0" x 32 . shift,-32)));
}

# rom1 en binaire
# obtenir le code ASCII des caractères
# ensuite conversion en binaire

my $nom_bin = join " ", map { dec2bin($_) } unpack("C*","rom1");
print "Le mots rom1 en binaire\n$nom_bin\n";

#reconversion en caractère
my $nom = join "",map { chr(bin2dec($_)) } split " ",$nom_bin;
print "Reconversion de mot rom1 de binaire vers affichage normal : $nom\n";

Le résultat :
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl
Le mots rom1 en binaire
1110010 1101111 1101101 110001
Reconversion de mot rom1 de binaire vers affichage normal : rom1
[lamitest@localhost my_perl_script]$
0
slt j'aimerais savoir pour la conversion des lettres cmt on fait ?est ce qu'il faut apprendre ce qu'il y a dans le cours betement ou quoi? s'il vous plait répondez moi j'ai un examen demain please et merci d'avance
0
Aimery1 Messages postés 111 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 14 mars 2010 11
28 juin 2007 à 21:22
ba oui fo lapredre par coeur mais sa se sui ossi non ya des programes
0
Bonjour,
en code ascii représenter les nombres suivantes: A=65;B=68;F=70;4=52
0
J'ai besoin d'un programme pascal qui permet la coversion d'une base à une autre ;
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.com ;
merci;
; ) : )
0
J'ai besoin d'un programme pascal qui permet la coversion d'une base à une autre ;
merci;
si vous pouvez l' envoyer sur mon mail : miouthcosmos@live.fr ;
merci;
; ) : )
0
zaien Messages postés 2 Date d'inscription mercredi 21 janvier 2009 Statut Membre Dernière intervention 21 janvier 2009
21 janv. 2009 à 14:52
SALUT
j ai un pb
comment je peux convertir un code binaire en code ASCII
jai essayé mais le programme n'a pas marché svp je veux 1 exenple en c
(si j'ai n bits par exemple)
0
saif87 Messages postés 109 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 2 juin 2011
21 janv. 2009 à 16:42
Bonjour

voici une parti de mon projet(reseau)cette parti vous montre la conversion en binaire d'une chaine de carctere et réciproquement a propos de la probabilite tu peut l'enlever (pour mon code met la probabilite a 99)
Donc tu doit réctifier le code en enlevant la probabilite et tu met le codage sur 8 bit
bon chance.
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<math.h>
int t[100],v=0,t2[100];
void codebinaire(char s[])
{
int i,a,t1[100],t2[100],j=0,k=0,temp,p=0,w=0,b,ss,f;
double x,z;
char chr,message;
for(i=0;i<strlen(s);i++)
{
a=s[i];//affectation cert a determiner le code ascii afin du calculer le code binaire
printf("le code ASCII de %c est %d \n",s[i],a);
while(a>0)//determination du code binaire
{
t1[j]=a%2;
a/=2;
j++;
}

for(p=j-1;p>j/2;p--)//invertion du tableau pour obtenir le code binaire correcte
{
temp=t1[p];
t1[p]=t1[k];
t1[k]=temp;
k++;
}
k=0;

for(j=v;j<v+7;j++)//stockage du code binire d'un caractere dans le tableau globale
{
t[j]=t1[w];
w++;

}
w=0;
j=0;
v+=7;
}
printf("\n le code binaire de votre message est \n");
for(i=0;i<v;i++)
{
printf("%d",t[i]);
}
}
void prob(double x)
{
int i,b;
double z;


printf("\n votre probabilite est %.2lf %%\n",x);
printf("\n votre nouvelle probabilite est %.0lf\n ",x*100);
printf("les valeure aleatoires sont\n");
for(i=0;i<v;i++)
{


z=rand()*100;
while((z>=10000)||(z<1))
{
z=rand()*100;
}
b=z;
printf("%d ",b);
if(x*100>=b)
t2[i]=t[i];
else
{
if(t[i]==0)
t2[i]=1;
else
t2[i]=0;
}


}
printf("\n le message apres la modification :\n");
for(i=0;i<v;i++)
{
printf("%d",t2[i]);
}
}
void decod()
{
int p,j,ss,i,f,k;
printf("\n*****decodage du message binaire*****\n");
p=j=ss=i=f=0;
k=7;
while(i<v)
{

for(j=p;j<p+7;j++)
{
ss+=t2[j]*pow(2,k-1-f);
f++;
}
printf("%c",ss);
p+=7;
i=p;
ss=f=0;
}
printf("\n");
}

void main()
{
double x;

char s[100];
printf("entrer une chaine de caractere ");
gets(s);
printf("string est %d\n",strlen(s));
codebinaire(s);
printf("\n entrer la probabilite que le message arrive correcte \n");//le probabilite enterer sera arrondi si elle de valeure relle
scanf("%lf",&x);
prob(x);
decod();
}
0
pique Messages postés 7 Date d'inscription lundi 1 octobre 2001 Statut Membre Dernière intervention 1 novembre 2001
4 oct. 2001 à 14:19
J'ai un autre problème pour convertir 256(16) en nombre décimale ma réponse est 00(16)??????

de plus mettre le nombre binaire 1010110000 en base décimale
(1*2^9)+.....(0*2^0)=672(16)?????
Est ce j'ai compris ou pas. Pouvez vous faire le détail de la solution pour que je puisse comprendre.

Merci

Danielle
-1
slt jaurai une question :estce que l'on peut peut ecrire un mot en binaire
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 févr. 2006 à 12:18
Salut,

Par exemple prenons le mots rom1.
On peut convertir chaque caractère dans son code ASCII

A = 65
B = 66
http://www.commentcamarche.net/base/ascii.php3

Ensuite on converti en binaire. Et voilà.
Comme je suis un peu paresseux pour faire ça à la main j'ai fait un petit script et voilà ton résultat pour le mot rom1.
Créer et exécuter sous Fedora 4
#! /usr/bin/perl

use warnings;
use strict;

#Description: conversion binaire/décimal & décimal/binaire
# décimal en binaire
sub dec2bin {
  return unpack ("B32", pack("N",shift));
}

# binaire en décimal
sub bin2dec {
  return unpack("N", pack("B32",shift));
}

# rom1 en binaire
# obtenir le code ASCII des caractères
# ensuite conversion en binaire

my $nom_bin = join " ", map { dec2bin($_) } unpack("C*","rom1");
print "Le mots rom1 en binaire\n$nom_bin\n";

#reconversion en caractère
my $nom = join "",map { chr(bin2dec($_)) } split " ",$nom_bin;
print "Reconversion de mot rom1 de binaire vers affichage normal : $nom\n";

Et le résultat
[lamitest@localhost my_perl_script]$ perl dec2bin2dec.pl
Le mots rom1 en binaire
00000000000000000000000001110010 00000000000000000000000001101111 00000000000000000000000001101101 00000000000000000000000000110001
Reconversion de mot rom1 de binaire vers affichage normal : rom1
[lamitest@localhost my_perl_script]$
0
SeGi01 Messages postés 403 Date d'inscription dimanche 8 juillet 2001 Statut Membre Dernière intervention 28 février 2010 149
2 oct. 2001 à 22:03
191= 16*11+? (tu trouves 11 en divisant 191 par 16 et ? en enlevant DE 191 le résultat de 16*11 (=176) donc 191-176=15)
d'où
191=16*11+15 en hexadécimal 11 s'écrit B et 15 F si bien que ton 191(10) devient BF(16)
chiffres hexa : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (tu peux compter, il y en a 16)
-2