Convertion d'entiers naturels dans différentes bases

Codage des nombres entiers :

.

Introduction :

.

Les ordinateurs et les programmes que l’on utilise tous les jours permettent de mémoriser, de transmettre et de transformer des nombres, des textes, des images, des sons, etc.

Pourtant, ces ordinateurs ne manipulent que des objets simples : des 0 et des 1.

Mémoriser, transmettre et transformer des nombres, des textes, des images ou des sons demande donc d’abord de les représenter comme des suites de 0 et de 1.

Une telle valeur, 0 ou 1, s’appelle un booléen, un chiffre binaire ou encore un bit (binary digit). Un tel circuit à deux états s’appelle un circuit mémoire un bit et son état se décrit donc par le symbole 0 ou par le symbole 1.

.

Représentation des entiers naturels

.

.

Nombres entiers base 10 :

.

Le système décimal prend 10 pour base et utilise les chiffres : 0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;

Les entiers naturels sont écrits en notation décimale à position. Il y a une infinité d’entiers naturels (n est une variable qui est utilisé en mathématique pour désigner un entier naturel par exemple pour les suites numériques)

.

Numération de position :

.

La valeur d’un chiffre dépend de sa position et de la base :

\(Valeur = chiffre \times Base^{position\,\,}\,\,\,:\,\,\)

\(345 = 3~ \times 10^{2} + 4 \times ~10^{1} + 5 \times 10^{0}\) : la base est 10.

Le chiffre 3 a pour position 2, le nombre 4 a pour position 1, le nombre 5 a pour position 0.

Vocabulaire :

10 est une dizaine. 100 est une centaine. 1000 est un millier ………….

Exemple :

\(nombre\,\,\, =\) \(les\,\,\, milliers\,\,\, +\) \(les\,\,\, centaines\,\, +\) \(les\,\,\,\, dizaines\,\,\,+\) \(les\,\,\, unité s\)
Position 3 2 1 0
\(nombre\,\,\,\ =\) \(3\,\,\, milliers\,\,\,\, +\) \(7\,\,\, centaines\,\,\,\,+\) \(4\,\,\, dizaines\,\,\,\, +\) \(5\,\, unités\)
\(~~3745\,\,\, =\) \(3 \times 10^{3}\,\, +\) \(7 \times 10^{2}\,\, +\) \(4 \times 10^{1}\,\,\, +\) \(5 \times 10^{0}\)

.

Base 2 (binaire) :

.

.

Notation binaire par position

.

Deux chiffres sont nécessaires :\(0\ et\ 1\) .

Vocabulaire :

2 est une deuzaine. 4 est une quatraine. 8 est une huitaine. 16 est une sezaine. 32 est une trente-deuzaine …

Exemple :

Positions 4 3 2 1 0
Valeur binaire =11011 1 1 0 1 1
Exposants \(2^{4}\) \(2^{3}\) 0 \(2^{1}\) 1
Valeur décimale = 27 16 8 0 2 1

.

Base Hexadécimale (base 16) :

.

Pour compter en base 16, on utilise les dix chiffres de la base 10 et on ajoute six lettres A; B; C; D ; E; F.

Base 16 0 1 2 3 4 5 6 7 8 9 A B C D E F
Base 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Exemple :

\(1A_{16} = 1 \times 16 + 10 = 26_{10}\)

On écrit les nombres entiers naturels en notation décimale à position.

C’est-à-dire que le nombre\(~458 = 4 \times 10^{2} + 5 \times 10^{1} + ~8 \times 10^{0} = 400 + 50 + 8\).

.

Binaire

.

En base 2, le nombre 101011 est égal en base 10 à :

\(32 + 8 + 2 + 1 = 43\)

\(k\) \(5\) \(4\) \(3\) \(2\) \(1\) \(0\)
\(2^{k}\) \(32\) \(16\) \(8\) \(4\) \(2\) \(1\)
\(Base~2\) \(1\) \(0\) \(1\) \(0\) \(1\) \(1\)
\(Base~10\) \(32\) \(0\) \(8\) \(0\) \(2\) \(1\)

.

Hexadécimal :

.

En base16  le nombre 7050A1 est égal en base 10 à :

\(7 \times 16^{5} + 5 \times 10^{3} + 160 + 1\)

\(k\) \(5\) \(4\) \(3\) \(2\) \(1\) \(0\)
\(16^{k}\) \(1048576\) \(65536\) \(4096\) \(256\) \(16\) \(1\)
\(Base~16\) \(7\) \(0\) \(5\) \(0\) \(A\) \(1\)
\(Base~10\) \(7340032\) \(0\) \(20480\) \(0\) \(160\) \(1\)

.

Conversion d’un nombre dans une base b

.

.

Méthode

.

Pour convertir un nombre dans une base b, on le convertit dans la base 10 puis on effectue une division euclidienne par b et la reste de cette division est placé en position zéro dans la base b.

Si le quotient est non nul on effectue une division euclidienne du quotient par b le reste est placé en position 1 dans la base b, et si le quotient est non nul on recommence.

La conversion se termine quand le quotient est égal à zéro.

.

Exemple de conversion

.

image0

.

Code python conversion d’un nombre

.

.

Exemples :

.

Changer la représentation d’un nombre entier :

On écrit les nombres entiers naturels en notation décimale à position. C’est-à-dire que le nombre\(\ 458 = 4 \times 10^{2} + 5 \times 10^{1} + \ 8 \times 10^{0} = 400 + 50 + 8\).

Binaire :

En base 2  le nombre 101011 est égal en base 10 à : \(32 + 8 + 2 + 1 = 43\)

image2

#0607 binaire base10.py from math import * def conversion_binaire_base10(lettre): #"convertir un nombre binaire en entier de base 10" nombre=ord(lettre) valeur=0 valide=True if nombre>47 and nombre<50:valeur=nombre-48 else:valide=False return valeur,valide def conversion_binaire(u): # convertir une chaine de caractères en entiers de base 10 k,entier=len(u),0 valide=True for i in range(k): j=k-i vt,nbr=conversion_binaire_base10(u[j-1]) if nbr==True: entier=entier+(vt)*int(pow(2,i)) else:valide=False return entier,valide #------------------- print("Conversion binaire en base 10 ") u=input(" Rentrer un nombre binaire : ") entier,valide= conversion_binaire(u) if valide==True: print(u,' = ',entier,'en base 10')

image4

#0607 base10 base 2.py from math import * def conversion_base_entier(lettre): #"convertir les nombres en base b en entiers" nombre=ord(lettre) valeur=0 valide=True if nombre>47 and nombre<58:valeur=nombre-48 else:valide=False return valeur,valide def conversion_chaine_entier(u): #"convertir une chaîne de caractères u en entier" entier,valide=0,True k=len(u) for i in range(k): j=k-i if ord(u[j-1])>47 and ord(u[j-1])<58: entier=entier+int(u[j-1])*int(pow(10,i)) else:valide=False return entier,valide def conversion_entier_base(base,u): #"conversion entier en chaine de caractères base<10" binaire='' valeur,valide=conversion_chaine_entier(u) if valide==True: if valeur==0:binaire='0' k=len(u) temp=1 while valeur>0: temp=int(valeur%base) quotient=valeur//base valeur=(valeur-temp)/base if temp<10:binaire=str(int(temp))+binaire return binaire,valide #------------------------------- print("Conversion base 10 en base 2") u=input(" Rentrer un nombre entier en base 10 : ") entier,valide= conversion_entier_base(2,u) if valide==True: print(u,' = ',entier,'en base 2')

.

Hexadécimal :

image7

.

#0607 hexa base10.py from math import * def conversion_hexa_base10(lettre): #"convertir un nombre hexadecimal en entier de base 10" nombre=ord(lettre) valeur=0 valide=True if nombre>47 and nombre<58:valeur=nombre-48 elif nombre>64 and nombre<71:valeur=nombre-55 else:valide=False return valeur,valide def conversion_hexadecimal(u): # convertir une chaine de caractères en entiers de base 10 k,entier=len(u),0 valide=True for i in range(k): j=k-i vt,nbr=conversion_hexa_base10(u[j-1]) if nbr==True: entier=entier+(vt)*int(pow(16,i)) else:valide=False return entier,valide #------------------- print("Conversion hexadécimal en base 10 ") u=input(" Rentrer un nombre hexadécimal : ") entier,valide= conversion_hexadecimal(u) if valide==True: print(u,' = ',entier,'en base 10')

Résultat :

image9

.

Vidéo de conversion hexadécimal, base 10

.

easy html5 video by EasyHtml5Video.com v4.0

.

Code python de conversion hexadécimal, base 10

.

#0602 hexadecimal from math import * from tkinter import * def affiche(hexadecimal,ligne,colonne): # affiche les donnée récupérées dans le widget hexadecimaly u=saisie(hexadecimal) somme1,nbr1=conversion_hexadecimal(u) if nbr1==True: info1=Label(fenetre,text=" ",width=20,height=2) info1.config(text=somme1,fg="blue",bg='light blue',font="arial 16 bold") info1.grid(row=ligne,column=colonne) elif nbr1==False: info1=Label(fenetre,text=" ") info1.config(text='Nombre non valide',fg="red",bg='light blue',font="arial 16 bold") info1.grid(row=ligne,column=colonne) def affiche1(hexadecimal,ligne,colonne): # affiche les donnée récupérées dans le widget hexadecimaly u=saisie(hexadecimal) somme1,nbr1=conversion_entier(u) if nbr1==True: info1=Label(fenetre,text=" ",width=20,height=2) info1.config(text=somme1,fg="blue",bg='light blue',font="arial 16 bold") info1.grid(row=ligne,column=colonne) elif nbr1==False: info1=Label(fenetre,text=" ") info1.config(text='Nombre non valide',fg="red",bg='light blue',font="arial 16 bold") info1.grid(row=ligne,column=colonne) def conversion_hexa_entier(lettre): #convertir les nombres hexadecimaux en entiers" nombre=ord(lettre) valeur=0 valide=True if nombre>47 and nombre<58:valeur=nombre-48 elif nombre>64 and nombre<71:valeur=nombre-55 else:valide=False return valeur,valide def conversion_entier_hexa(lettre): nombre=ord(lettre) valeur=0 valide=True if nombre>47 and nombre<58:valeur=nombre-48 else:valide=False return valeur,valide def conversion_chaine_entier(u): #convertir chaine de caractrere en entiers somme=0 valide=True k=len(u) for i in range(k): j=k-i if ord(u[j-1])>47 and ord(u[j-1])<58: somme=somme+int(u[j-1])*int(pow(10,i)) else:valide=False return somme,valide def conversion_entier(u): hexa='' somme,valide=conversion_chaine_entier(u) if valide==True: k=len(u) temp=1 while somme>0: temp=int(somme%16) quotient=somme//16 somme=(somme-temp)/16 if temp<10:hexa=str(int(temp))+hexa elif temp>9:hexa=chr(int(temp+55))+hexa return hexa,valide def conversion_hexadecimal(u): #convertir chaine de caractrères en entiers somme=0 k=len(u) valide=True for i in range(k): j=k-i vt,nbr=conversion_hexa_entier(u[j-1]) if nbr==True: somme=somme+(vt)*int(pow(16,i)) else:valide=False return somme,valide # fonction qui récupère les donnée du widget hexadecimaly def saisie(hexadecimal): u=hexadecimal.get() return u fenetre = Tk() fenetre.geometry("1100x500") fenetre.configure(bg='light blue') fenetre.title("NSI hexadecimal ") # création de widgets 'Label'et 'hexadecimaly': info5=Label(fenetre,text=" ") info5.config(text="Conversion Hexadecimal ---------------> Entier base 10",fg="blue",bg='light blue',font="arial 16 bold") info5.grid(row=1,column=2,columnspan=4) txt1 = Label(fenetre, text ='Hexa n°1:',font="arial 16 bold",bg='light blue',fg='red',width=10,height=2) hexadecimal1 = Entry(fenetre, bg ='white', fg='red',font="arial 16 bold") valeur3 = Button(fenetre, text ="Entier 1",font="arial 10 bold",bg="yellow", command=lambda:affiche(hexadecimal1,3,4) ) #Utilisation de la méthode grid pour contrôler la disposition des widgets txt1.grid(row =3, column=1) hexadecimal1.grid(row =3, column =2) valeur3.grid(row=3,column=3) info5=Label(fenetre,text=" ") info5.config(text="Conversion Entier base 10 --------------------> Hexadecimal ",fg="blue",bg='light blue',font="arial 16 bold") info5.grid(row=10,column=2,columnspan=4) txt1 = Label(fenetre, text ='Entier n°1:',font="arial 16 bold",bg='light blue',fg='red',width=10,height=2) hexadecimal4 = Entry(fenetre, bg ='white', fg='red',font="arial 16 bold") valeur6 = Button(fenetre, text ="Hexadécimal 1",font="arial 10 bold",bg="light green", command=lambda:affiche1(hexadecimal4,11,4) ) #Utilisation de la méthode grid pour contrôler la disposition des widgets txt1.grid(row =11, column=1) hexadecimal4.grid(row =11, column =2) valeur6.grid(row=11,column=3) fenetre.mainloop()