Bonjour,
J’aimerais savoir si quelqu’un savait comment je pourrais trouver le plus grand entier codé en binaire à n octets.
Merci.
Bonjour,
J’aimerais savoir si quelqu’un savait comment je pourrais trouver le plus grand entier codé en binaire à n octets.
Merci.
Le choix à faire (c’est-à-dire le nombre de bits à utiliser) dépend de la fourchette des nombre que l’on veux utiliser. Pour coder des nombres entier naturel compris entre 0 et 255, il faut de 8 bits (un octet) car 28=256. D’une manière générale un codage sur n bits permet de représenter des nombres entiers naturels compris entre 0 et 2n-1.
Pour représenter un nombre entier naturel après avoir défini le nombre de bits sur lequel on le code, il suffit de ranger chaque bit dans la cellule binaire correspondant à son poids binaire de la droite vers la gauche, puis on « remplit » les bits non utilisés par des zéros.
Petite précision :
C’est 2^( n*8 ) - 1 ou n représente le nombre d’octets. Le 8 vient du fait qu’il faut 8 bits pour former 1 octet.
Par exemple sur 2 octets tu peux aller jusqu’à 2^( 28 ) - 1 soit 65536 - 1 = 65535.
Ensuite tu fais ta conversion décimal vers binaire comme l’a expliqué riri38.
++
Edité le 28/12/2007 à 15:31
Ok, merci beaucoup à tous les deux !
Donc, si je veux trouver la valeur maximal du timestamp, codé sur 4 octets. Je fais 2^32-1, ce qui nous donne 4 294 967 295. Mais sur les sites qui expliquent le bug de 2038, cette valeur est de 2 147 483 647 et le calcul semble être 2^31-1. Pourquoi ?
tu peu donner un liens
merci
mais je pense que le calcul a ete fait pour des entier signer sur 4 octet
On parle d’entier non-signé quand seul les nombres plus grand et égal à zéro sont représentés. Dans ce cas, on peut representer sur 4 octets les nombres compris entre 0 et +4294967295.
et en signe les entiers longs (sur 4 octets, compris entre -2147483648 et +2147483647). En gros la moitier car toujours 4 octet mais diviser en 2 une pour la partie negative et l’autre pour la positive
désoler si je me fait mal comprendre mes cour d’electronique sont loin
Edité le 29/12/2007 à 14:07
Ben en fait ça dépend si ton nombre est codé sur un entier signé ou non signé… Les exemples qu’on t’as donnés étaient avec des entiers non signés.
Pour un entier signé (ce qui semble être le cas du bug de 2038 dont tu parles), c’est 2^(n*8-1) - 1 soit 2 147 483 647.
++
bon ba on est 2 a pensez la meme chose alors
pour ton bug c’est du entier signé
Ok. Merci beaucoup !