[PHP] Opérateurs sur les bits

Équivalence des opérateurs

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je m’entraîne actuellement sur les opérateurs sur les bits.

Comme exercice, j’ai essayé de trouver des équivalences pour ces opérateurs.

Soit $n, un nombre entier positif compris entre 0 et 224.

Quelque soit $n, les expressions suivantes retournent-elles toutes true ?

  1. ($n & 0xFF) === ($n % 256)
  2. (($n >> 16) % 256) === ($n >> 16)
  3. ($n >> 32) === 0

Je pense que c’est bien le cas dans les 3 propositions.

Votre avis ?

+0 -0

Hello!

  1. ($n & 0xFF) === ($n % 256)
Xalty

Dans l’expression de gauche, tu isoles les 8 premiers bits de poids faible. Dans l’expression de droite, tu fais un modulo 2^8, ce qui revient aussi à récupérer les 8 premiers bits de poids faible puisque tout le reste sera à 0.

  1. (($n >> 16) % 256) === ($n >> 16)
Xalty

Dans l’expression de gauche, tu divises par 2^16. Sachant que tu as 24 bits (c’est important) dans ton nombre, tu ne te retrouveras au final qu’avec les 8 premiers bits de poids fort, décalés à droite. Donc le % 256 est caduc et l’expression de droite ($n >> 16) est ainsi équivalente.

  1. ($n >> 32) === 0
Xalty

Tu peux même réduire à ($n >> 25) === 0 puisque ton nombre est compris entre 0 et 2^24.

En fait, je pense que dans ton énoncé tu voulais dire "entre 0 et 2^24 - 1". Non ?

+0 -0

Tu peux même réduire à ($n » 25) === 0 puisque ton nombre est compris entre 0 et 2^24.

Ah bon ? ça je ne comprends pas, 25 n’est pas multiple de 2 o_O

En fait, je pense que dans ton énoncé tu voulais dire "entre 0 et 224 - 1". Non ?

Nope, 224 est bien inclus ^^

Tu peux même réduire à ($n » 25) === 0 puisque ton nombre est compris entre 0 et 2^24.

Ah bon ? ça je ne comprends pas, 25 n’est pas multiple de 2 o_O

Xalty

J’ai parlé de 2^25, pas de 25. Et c’est d’autant plus vrai si tu inclus 2^24 qui vaut 1000000000000000000000000 et qui nécessite très exactement… 25 bits pour être codé.

Tu peux même réduire à ($n » 25) === 0 puisque ton nombre est compris entre 0 et 2^24.

Ah bon ? ça je ne comprends pas, 25 n’est pas multiple de 2 o_O

Xalty

J’ai parlé de 2^25, pas de 25. Et c’est d’autant plus vrai si tu inclus 2^24 qui vaut 1000000000000000000000000 et qui nécessite très exactement… 25 bits pour être codé.

Ge0

Je viens de comprendre ! Comme le nombre est stocké sur 25 bits au maximum, si tu les décales de 25 bits vers la droite, ça donnera toujours zéro ! :-°

Merci ^^

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte