Maison >développement back-end >Golang >Différence dans les résultats des calculs de décalage au niveau du bit

Différence dans les résultats des calculs de décalage au niveau du bit

WBOY
WBOYavant
2024-02-08 21:11:131061parcourir

Différence dans les résultats des calculs de décalage au niveau du bit

L'éditeur PHP Zimo vous propose un article sur "La différence dans les résultats du calcul du décalage au niveau du bit". En programmation informatique, l'opération de décalage de bits est une opération courante, qui peut effectuer des opérations de décalage vers la gauche ou la droite sur des nombres binaires. Cependant, différents langages de programmation peuvent présenter des différences dans le traitement des résultats des opérations de déplacement, ce qui oblige les développeurs à y prêter attention. Cet article présentera en détail les différences dans les résultats des opérations de déplacement dans différents langages de programmation et fournira quelques exemples pour aider les lecteurs à mieux comprendre et appliquer les opérations de déplacement. Que vous soyez un débutant ou un développeur possédant une certaine base en programmation, vous pouvez acquérir des connaissances et des compétences utiles grâce à cet article.

Contenu de la question

Il existe des différences dans la sortie de mon programme go, en particulier les variables x1 et x2. Voici l'extrait de code correspondant :

package main

var n uint = 10
const N uint = 10

func main() {
    var x1 byte = (1 << n) / 100
    var x2 byte = (1 << N) / 100
    println(x1, x2)
}

Résultat attendu : 10 10

Sortie réelle : 0 10

Soyez curieux des raisons qui se cachent derrière les différences et cherchez des explications.

Solution de contournement

Les expressions constantes sont évaluées avec une précision non spécifiée. Attribué à x2 的所有内容都是恒定的,因此它可以正确计算 210 / 100 = 1024 / 100 = 10。而在第一个表达式中,1 被视为 byte,这意味着它会立即移出。 1 必须被视为 byte dans cahier des charges  :

Si l'opérande gauche d'une expression de décalage non const est une constante non typée, elle est d'abord implicitement convertie dans le type supposé lorsque l'expression de décalage est remplacée uniquement par son opérande de gauche.

1 est la constante non typée à gauche, nvar 使得表达式变得非常量,因此 1 必须具有其受让人 x1 的类型,即 byte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer