>>sortie
68 ans 35 jours 3 heures 14 minutes 7 secondes
Chapitre 2: Représentation des entiers relatifs
En complément à deux, quel intervalle d’entiers relatifs peut-on représenter avec des mots de 8 bits? Combien de valeurs sont représentées?
Même question avec des mots de 32 bits et 64 bits.
Dans cet exercice, on utilise un codage en complément à sur 4 bits.
Quels sont les nombres minimum et maximum que l’on peut représenter?
Compléter le tableau suivant:
Base 10 | Complément à 2 |
---|---|
-8 | |
-1 | |
0 | |
3 | |
-5 | |
0111 |
|
1001 |
|
1100 |
Réaliser les calculs suivants en binaire: et .
Trouver la représentation binaire sur huit bits des entiers relatifs et .
Trouver la représentation décimale des entiers relatifs dont la représentation binaire sur huit bits est
0000 1000
et 1000 1000
.
Calculer la représentation binaire sur huit bits de l’entier relatif , puis de son opposé.
Représenter les entiers relatifs et en binaire sur huit bits. Ajouter les deux nombres binaires obtenus en utilisant l’algorithme de l’addition binaire. Quel est l’entier relatif obtenu ? Pourquoi est-il négatif ?
Calculer en binaire .
Voici un extrait d’un article developpez.com sur le bug de l’an 2038.
Depuis la version 5.6 du noyau, publié en mars dernier, l’équipe a commencé à proposer des correctifs pour résoudre le problème de l’année 2038. Il s’agit d’un bogue détecté il y a longtemps dans l’encodage du temps sur les systèmes de type Unix, dont Linux, macOS, et d’autres systèmes d’exploitation compatibles POSIX. Sur ces systèmes, le calcul du temps est effectué en fonction des secondes écoulées à partir du 1er janvier 1970 à 00:00:00 UTC (nommée également epoch). Un jour donnera par exemple 86 400 secondes et une année 31 536 000 secondes.
Et plus les années passeront, plus il faudra de nombres pour représenter les dates. Pour effectuer le décompte sur ces systèmes, lorsque la fonction
time()
est appelée, elle retourne un entier signé de type “time_t”. Si le système est 32 bits, la valeur retournée est un entier signé 32 bits et si le système est 64 bits, la valeur retournée est 64 bits. Sur un système 64 bits, les limites sont supérieures à 292 milliards d’années. Il n’y a donc pas de soucis à se faire ici (ce sera beaucoup plus que l’âge de notre planète ou l’estimation de son espérance de vie).Mais sur les systèmes 32 bits, le nombre de secondes total que la fonction peut retourner est , c’est-à-dire environ 136 ans. La date de référence étant le 1er janvier 1970 à 00:00:00 UTC, la date minimale représentable est le vendredi 13 décembre 1901 et la date maximale représentable est le mardi 19 janvier 2038 à 3 h 14 min 8 s. Lorsqu’il sera 3 h 14 min 8 s le 19 janvier 2038, le système passera au 13 décembre 1901 à la seconde suivante (également appelé le bogue de l’an 2038 abrégé en anglais Y2038). Bien évidemment, ce ne sera pas la fin du monde. article developpez.com
Quelle est la plus grande valeur pouvant être encodé sur 32 bits en complément à deux?
Convertir la valeur précédente en ans jours heures minute seconde en considérant que les années font toutes 365 jours.
>>sortie
68 ans 35 jours 3 heures 14 minutes 7 secondes
Vérifier la date indiquée par l’article sachant que les années bissextiles entre 1970 et 2038 sont:
1972; 1976; 1980; 1984; 1988; 1992; 1996; 2000; 2004; 2008; 2012; 2016; 2020; 2024; 2028; 2032; 2036.
Vérifier alors l’affirmation suivante concernant l’heure affichée une seconde plus tard si le bug n’était pas réparé.
Le bug de l’an 2038, ou bogue de l’an 2038 (au Canada), aussi appelé Y2038, est un bug informatique similaire au bug de l’an 2000 qui pourrait perturber le fonctionnement d’un grand nombre de systèmes informatiques le 19 janvier 2038 à 3 h 14 min 8 s, temps universel. Ils afficheront alors 13 décembre 1901 et 20 h 45 min 52 s.
Repérer deux erreurs de l’article du site developpez.com.
Créer un programme qui demande un nombre à encoder et un nombre de bits d’encodage, et qui renvoie la représentation binaire du nombre en complément de ce nombre.
P.ex:
"1111"
."0101"
.Pour simplifier, on supposera que l’utilisateur ne demande pas l’impossible, et que le nombre demandé peut être codé sur le nombre de bits donnés.
Aides:
Pour obtenir la représentation binaire d’un nombre entier naturel on utilise:
bin(nombre)[2:]
.
P.ex: bin(127)[2:]
renvoie '1111111'
Pour parcourir un à un les éléments d’une chaîne de caractère, on utilise la syntaxe
for élément in chaine_de_caractères:
P.ex:
Pour forcer l’écriture sur bits d’un nombre binaire, on utilise: '{:0nd}'.format(nombre)
P.ex: '{:08d}'.format(1000)
renvoie '00001000'
Une des difficultés notables de cet exercice est qu’il faut traiter les nombres binaires comme des
str
. Réfléchissez bien aux types utilsés.
Créer un programme qui demande un code binaire à décoder écrit sur bits, et qui renvoie la valeur décimale de ce nombre par décodage du nombre en complément .
P.ex:
"1111"
, le programme affiche: -1
."0101"
, le programme affiche: 5
.le codage binaire donnant implicitement la valeur de n pour le complément à 2.
Aide
Pour obtenir la longueur d’une chaîne de caractères, on utilise la fonction len()
.
P.ex: len("0101")
renvoie 4
.