Quelqu'un pourrait-il s'il vous plaît m'expliquer l'utilisation de <<
et >>
dans Go? Je suppose que c'est similaire à d'autres langues.
go
bitwise-operators
brianoh
la source
la source
D'après la spécification à http://golang.org/doc/go_spec.html , il semble qu'au moins avec des entiers, il s'agit d'un décalage binaire. par exemple, le binaire 0b00001000 >> 1 serait 0b00000100 et 0b00001000 << 1 serait 0b00010000.
Go n'accepte apparemment pas la notation 0b pour les entiers binaires. Je l'utilisais juste pour l'exemple. En décimal, 8 >> 1 vaut 4 et 8 << 1 vaut 16. Décaler vers la gauche de un équivaut à une multiplication par 2, et décaler vers la droite de un équivaut à diviser par deux, en supprimant tout reste.
la source
Les opérateurs << et >> sont des opérateurs arithmétiques Go .
la source
Ce sont essentiellement des opérateurs arithmétiques et c'est la même chose dans d'autres langages, voici un exemple de base PHP, C, Go
ALLER
Démo GO
C
Démo C
PHP
Démo PHP
Ils sortiraient tous
la source
Go's << et >> sont similaires aux décalages (c'est-à-dire: division ou multiplication par une puissance de 2) dans d'autres langages, mais comme Go est un langage plus sûr que C / C ++, il effectue un travail supplémentaire lorsque le nombre de quarts est un nombre .
Les instructions de décalage dans les processeurs x86 ne prennent en compte que 5 bits (6 bits sur les processeurs x86 64 bits) du compte de décalage. Dans des langages comme C / C ++, l'opérateur shift se traduit par une seule instruction CPU.
Le code Go suivant
impressions
alors qu'un programme C / C ++ imprimerait
la source
<<
ou>>
en C / C ++?<<
est le décalage à gauche.>>
est un décalage vers la droite d'extension de signe lorsque l'opérande de gauche est un entier signé, et est un décalage vers la droite d'extension de zéro lorsque l'opérande de gauche est un entier non signé.Pour mieux comprendre,
>>
pensez àAinsi, lorsqu'ils sont appliqués à un entier non signé, les bits à gauche sont remplis de zéro, tandis que lorsqu'ils sont appliqués à un entier signé, les bits à gauche sont remplis avec le bit le plus à gauche (qui est 1 lorsque l'entier signé est négatif selon 2. complément).
la source
En mathématiques décimales , lorsque nous multiplions ou divisons par 10 , nous effectuons les zéros à la fin du nombre.
En binaire , 2 a le même effet. Nous ajoutons donc un zéro à la fin ou supprimons le dernier chiffre
la source