Table des matières:
Vidéo: Comprendre le système binaire 2024
Les variables C ++ sont stockées en interne en tant que nombres dits binaires. Les nombres binaires sont stockés sous la forme d'une séquence de valeurs 1 et 0 appelées bits. La plupart du temps, vous n'avez pas vraiment besoin de savoir quels bits particuliers vous utilisez pour représenter les nombres. Parfois, cependant, il est pratique et pratique de bricoler des nombres au niveau des bits - donc C ++ fournit un ensemble d'opérateurs à cette fin.
Les opérateurs logiques dits bitwise fonctionnent sur leurs arguments au niveau du bit. Pour comprendre leur fonctionnement, examinez d'abord comment les ordinateurs stockent les variables.
Le système de nombres décimaux
Les numéros que vous avez connus depuis le moment où vous pouviez compter sur vos doigts sont connus sous le nom nombres décimaux parce qu'ils sont basés sur le nombre 10. En général, le programmeur exprime des variables C ++ comme nombres décimaux. Ainsi, vous pouvez spécifier la valeur de var comme (disons) 123, mais considérez les implications.
Un nombre tel que 123 fait référence à 1 * 100 + 2 * 10 + 3 * 1. Tous ces nombres de base - 100, 10 et 1 - sont des puissances de 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Exprimé d'une manière légèrement différente (mais équivalente), 123 ressemble à ceci:
123 = 1 * 10 < 2 + 2 * 10 1 + 3 * 10 0 Rappelez-vous que
tout nombre à la puissance zéro est 1 Autres systèmes de numération
Bon, d'accord, utiliser 10 comme base (ou
base ) de notre système de comptage provient probablement de ces 10 doigts humains, les outils de comptage d'origine. Une base alternative pour un système de comptage aurait tout aussi bien pu être 20.
octal aurait aussi bien fonctionné: 123
10 = 1 * 8 2 + 7 * 8 1 < + 3 * 8 0 = 173 8 Les petits 10 et 8 se réfèrent ici au système de numérotation, 10 pour la décimale (base 10) et 8 pour l'octal (base 8). Un système de comptage peut utiliser n'importe quelle base positive. Le système de numération binaire
Les ordinateurs ont essentiellement deux doigts. Les ordinateurs préfèrent compter en utilisant la base 2. Le nombre 123
10
serait exprimé de cette façon: 123 10
= 0 * 2 7 + 1 * 2 < 6 + 1 * 2 5 + 1 * 2 4 + 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 1 * 2 0 123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1 = 01111011 2 La convention informatique exprime des nombres binaires en utilisant 4, 8, 16, 32 ou même 64 chiffres binaires, même si les premiers chiffres sont 0.C'est aussi à cause de la façon dont les ordinateurs sont construits en interne. Comme le terme chiffre
désigne un multiple de 10, un chiffre binaire
est appelé un bit (abréviation de chiffre binaire >). Un octet est composé de 8 bits. (Appeler un chiffre binaire a octet-it ne semblait pas être une bonne idée.) La mémoire est généralement mesurée en octets (comme les rouleaux sont mesurés en unités de douzaines de boulanger). Avec une base aussi petite, vous devez utiliser un nombre de bits grand pour exprimer des nombres. Les êtres humains ne veulent pas avoir à utiliser une expression telle que 011110112 pour exprimer une valeur aussi banale que 123 10 . Les programmeurs préfèrent exprimer des nombres en utilisant un nombre pair de bits.
Le système octal - basé sur 3 bits - était le système binaire par défaut dans les débuts de C. On en voit un vestige même aujourd'hui - une constante qui commence par un 0 est supposée être octale en C ++. Ainsi, la ligne: cout << "0173 =" << 0173 << endl; produit la sortie suivante: 0173 = 123 Cependant, l'octal a été presque entièrement remplacé par le système
hexadécimal
, qui est basé sur des chiffres de 4 bits.
hexadécimal utilise les mêmes chiffres pour les chiffres de 0 à 9. Pour les chiffres entre 9 et 16, hexadécimal utilise les six premières lettres de l'alphabet: A pour 10, B pour 11, et ainsi de suite. Ainsi, 123
10
devient 7B 16 , comme ceci:
123 = 7 * 16 1 + B (ie 11) * 16 0 = 7B
16 Les programmeurs préfèrent exprimer des nombres hexadécimaux par multiples de 4 chiffres hexadécimaux, même lorsque le premier chiffre est 0. Enfin, qui veut exprimer un nombre hexadécimal tel que 7B 16 en utilisant un indice? Les terminaux ne prennent même pas en charge
les indices. Même sur un traitement de texte, c'est un glisser pour changer les polices de et vers le mode indice juste pour taper deux chiffres moche.
Par conséquent, les programmeurs (pas d'imbéciles, ils) utilisent la convention de commencer un nombre hexadécimal avec un 0x. Ainsi, 7B devient 0x7B. En utilisant cette convention, le nombre hexadécimal 0x7B est égal à 123 décimal tandis que 0x123 hexadécimal est égal à 291 décimal. L'extrait de code cout << "0x7B =" << 0x7B << endl; cout << "0x123 =" << 0x123 << endl; produit la sortie suivante: 0x7B = 123 0x123 = 291 Vous pouvez utiliser tous les opérateurs mathématiques sur les nombres hexadécimaux de la même manière que vous les appliqueriez aux nombres décimaux.
Si vous voulez vraiment, vous pouvez écrire des nombres binaires en C ++ '14 en utilisant le préfixe '0b'. Ainsi, 123 devient 0b01111011.