
Compte-rendu du T.P. 5 : ´ecriture binaire des entiers
1 Conversion de la base dix vers la base deux
1.1 En Python
b) bin renvoie une chaˆıne de caract`ere qui commence par 0b pour dire qu’elle repr´esente un
nombre en binaire.
c) Le programme suivant est long car comment´e mais sinon une ligne importe seule : la d´ef. de
m.
def bi n_ as_ in t ( n ):
" r en voie l ’ ´ec rit ure b in aire de n c omme un en tier "
m= int ( bin (n )[ 2:]) # on extrait dans la cha^ıne bin (n ) la partie qui com mence `a 2
# puis on convert it la cha^ıne en entier .
return m
d) Le shell r´epond 27. C’est donc une fa¸con imm´ediate de convertir de la base 2 `a la base 10.
N.B. Il ne s’agit pas juste d’un affichage !
1.2 En SciLab, avec petite initiation aux types en SciLab
d) On a compris que dec2bin(53) renvoie en fait une chaˆıne de caract`eres.
e) De la mˆeme fa¸con (en sens inverse), on a besoin de donner une chaˆıne comme argument de
la fonction bin2dec qui renvoie un nombre.
1.3 Test de vitesse en SciLab
En fait suivant la doc. de SciLab,timer() renvoie un temps C.P.U. qui n’est pas forc´ement en
seconde mais en nombre de cycles C.P.U. En fait, cela d´epend du syst`eme derri`ere. (Sous MacOS X
en fait, il semble que timer() donne bien des temps en seconde, ce qui explique que je ne m’´etais
pas m´efi´e.).
Donc il est pertinent pour comparer des programmes SciLab entre eux, mais pour comparer
avec Python. Suivant la doc. de SciLab, il semble pr´ef´erable pour avoir des temps en seconde,
d’utiliser tic() et toc() qui doivent donner des temps en seconde sur tous les syst`emes.
Chez moi le r´esultat est de toutes fa¸cons autour de 1,5 s.
1.4 Portage en Python et test de vitesse
Un avatar Python du programme pr´ec´edent est :
from time import clock
debut = clock ()
for i in range (1 ,100001): # d´ecalage de 1 n´ece ssair e par rapport `a Scilab
bin (i)
fin = clock ()
temps = clock () - debut # d iff ´erence entree le clock et le timer !
print ( temps )
Il donne un temps moyen de 0.028 s, beaucoup plus rapide ! A quoi bon utiliser SciLab alors ? On
va voir que SciLab sait faire beaucoup de choses... mais il n’est pas forc´ement optimis´e pour les
op´erations sur les entiers. Les built-in fonctions de Python sont rapides, ´ecrites en C.
1