Pouvez-vous s’il vous plaît expliquer les lignes ci-dessous, avec quelques bons exemples.
Un décalage arithmétique gauche de n équivaut à une multiplication par 2 n (à condition que la valeur ne déborde pas).
Et:
Un décalage arithmétique droit par n d’une valeur de complément à deux équivaut à une division par 2 n et à un arrondi à l’infini négatif. Si le nombre binary est traité comme un complément à 1, la même opération de décalage à droite entraîne une division par 2 n et un arrondi à zéro.
- est-il possible de masquer un tableau de caractères
- Opérateur de complément au niveau du bit
- Implémentation du décalage logique à droite en utilisant seulement “~ & ^ | + <> = “opérateurs et 20 opérations
- Construction d’une expression logique qui comptera les bits dans un octet
- comment utiliser l’inverse en C
Je vais expliquer ce qui se passe dans une base que nous connaissons mieux: 10.
En base 10, disons que vous avez un nombre N = 123. Maintenant, vous “déplacez” ce nombre vers la gauche k = 3 positions, en remplissant les chiffres vides avec 0. Vous obtenez donc X = 123000.
Notez que X = N * 10 k .
Le cas avec la base 2 est analogue.
Example 1 (base 10) | Example 2 (base 2) | N = 123 | N = 110101 (53 in base 10) k = 3 | k = 2 (in base 10) N << k = 123000 | N << k = 11010100 (212 in base 10) | 10^k = 1000 | 2^k = 100 (in base 2; 4 in base 10) N * 10^k = 123000 | N * 2^k = 11010100 (53 * 4 = 212 in base 10) |
Le cas avec décalage droit est simplement un miroir du processus, et est également analogue en base 10. Par exemple, si j'ai 123456 en base 10 et que je "décale" 3 positions à droite, j'obtiens 123. C'est 123456/1000 (division entière), où 1000 = 10 3 .
Il est facile de créer vos propres exemples.
Considérons cinq qui est 101
en binary. Gauche le déplacer une fois et vous obtenez 1010
qui est binary pour dix. Faites-le encore et vous obtenez 10100
qui est vingt et ainsi de suite ..