|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité(e)
Messages : n/a ![]() |
Bonjour à tous et à toute.
Ma requête est simple: y-aurait-il une âme charitable pour m'expliquer ce bout de code: Code :
mais ce n'est pas très clair et surtout l'opéraition ($date>>8 ) & 0xFF; le 0xFF c'est vraiment pas très clair. Merci pour vos réponse, j'aimerais bien comprendre. Coridalement. |
||
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : mai 2005 Messages : 657 ![]() |
Salut,
0xFF est l'écriture hexadécimale pour le nombre 255. & est l'opérateur "et binaire" (cf http://fr2.php.net/manual/fr/languag...rs.bitwise.php) L'opération ($date >> 8) & 0xFF effectue un décalage de 1 octets (8 bits), puis récupere uniquement l'octet de poids faible. En d'autres terme, elle prend le 2é octet en partant des poids faibles. |
|
|
00
|
|
|
#3 |
|
Invité(e)
Messages : n/a ![]() |
C'est toujours pas très clair lol mais bon c'est pas grave :$
|
00
|
|
|
#4 |
|
Membre chevronné
![]() Inscription : mai 2005 Messages : 657 ![]() |
C'est quoi que tu comprends pas ? ^^
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Apparemment ta date a été codée sur deux octets je vais essayer d'expliquer mais je promets rien.
Ta date en décimal vaut 131532317 ce qui en hexadécimal donne : 07D7061D Maintenant chaque caractère hexa est codé en binaire sur 4 bits! On a donc décidé que l'année devait être sur 2 octets (16bits) : on récupère l'année en décalant de 16 bits a droite (pour garder les 16 bits de gauche). Ca revient a prendre 07D7061D et décaler a droite de 4 lettres (chaque lettre vaut 4 bits) = > 000007D7 Maintenant ca c'est de l'hexadecimal donc en décimal ca donne 2007 Voilà l'année Pour le mois on a décidé qu'elle était sur 8 bits a coté de l'année, on décale donc seulement de 8 bits a droite (on obtient donc) 0007D706. Comme on sait que 07D7 correspond a l'année on va faire un & binaire avec juste 0xFF (ca revient a dire je prends 0007D706 je fais un & avec 000000FF et ca donne 00000006 (en gros tu récupères juste les 8 derniers bits). 00000006 en hexa donne 6 en décimal Tu refais ensuite un & avec toute la valeur hexa (comme dit avant tu récupères les 8 derniers bits) et ca te donner 1D en hexa soit 29 en décimal. J'espère avoir été a peu pres clair ^^ Pour partir de la date et obtenir le nombre décimal du début tu fais ca : $dateInt = (int)("2007"."06"."29"); |
|
|
00
|
|
|
#6 |
|
Invité(e)
Messages : n/a ![]() |
Merci beaucoup c'est beaucoup plus clair.
Et dans quel cas c'est vraiment utile d'utiliser les opérations arytmétique comme cela, car OK c'est vrai que c'est super pratique et rapide. Cordialement. |
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Quand tu stockes la date en mémoire en chaine de caractères, dans ton cas ca prendra en mémoire 8 caractères et chaque caractère vaut un certain nombre de bits (ca dépend des systemes) mais admettons que chaque caractère soit codé sur 8 bits, pour stocker une date tu as donc besoin de 64bits au lieu des 32 bits de l'entier donc tu prends deux fois moins de place pour stocker la meme chose.
Donc dans des sytemes embarqués a faible mémoire c'est tres important d'économiser la place de cette manière. |
|
|
00
|
|
|
#8 |
|
Invité(e)
Messages : n/a ![]() |
Je vois tout à fait oui en effet, meme si maintenant les serveurs ont des config de malade, sur des base de données volumineuse il est toujours important de stocker le plus d'information possible dans le moin de bits possible.
En tout cas merci d'avoir pris le temp de me répondre. Cordialement. |
00
|
Copyright © 2000-2012 - www.developpez.com