Inhoudsopgave:
Video: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
C ++ -variabelen worden intern opgeslagen als zogenaamde binaire getallen. Binaire getallen worden opgeslagen als een reeks van 1 en 0 waarden die bekend staan als bits. Meestal hoeft u zich niet bezig te houden met getallen op bitniveau; er zijn echter gelegenheden waarbij dit handig is. C ++ biedt een aantal operators voor dit doel.
De zogenaamde bitsgewijze logische operatoren werken op hun argumenten op bitniveau. Om te begrijpen hoe ze werken, onderzoekt u hoe computers variabelen opslaan.
Het decimale nummer systeem
De nummers die u kent zijn bekend als decimale getallen omdat ze gebaseerd zijn op het getal 10. Over het algemeen geeft de programmeur C ++ weer variabelen als decimale getallen. Je zou dus zeggen dat de waarde van var bijvoorbeeld 123 is.
Een getal zoals 123 verwijst naar 1 * 100 + 2 * 10 + 3 * 1 . Elk van deze basisnummers - 100, 10 en 1 - is een macht van 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Op een enigszins andere maar equivalente manier uitgedrukt:
123 = 1 * 10 2 + 2 * 10 1 + 3 * 10 0
Houd er rekening mee dat elk getal tot nul nul is 1.
Ander nummerensysteem
Het gebruik van een basisnummer van 10 voor het telsysteem komt naar alle waarschijnlijkheid voort uit het feit dat mensen 10 vingers hebben, de originele telgereedschappen. Het alternatief zou basis 20 geweest zijn.
Als honden ons nummeringsschema hadden uitgevonden, was het misschien gebaseerd op het cijfer 8 (één cijfer van elke poot is uit het zicht verwijderd op het achterste deel van het been). Zo'n octaal systeem zou net zo goed hebben gewerkt:
123 10 = 1 * 8 2 + 7 * 8 1 + 3 * 8 0 = 173 8
De kleine 10 en 8 verwijzen hier naar het nummeringssysteem, 10 voor decimaal (basis 10) en 8 voor octaal (basis 8). Een telsysteem kan elke positieve basis gebruiken.
Het binaire getalsysteem
Computers hebben in wezen twee vingers. (Misschien is dat de reden waarom computers zo stom zijn: zonder een duimbreed, kunnen ze niets bevatten. En dan nog, misschien ook niet.) Computers geven de voorkeur aan tellen met behulp van basis 2. Het getal 123 10 wordt uitgedrukt als:
123 10 = 0 * 128 + 1 * 64 + 1 * 32 + 1 * 16 + 1 * 8 + 0 * 4 + 1 * 2 + 1 * 1
= 01111011 < 2 Het is altijd gebruikelijk om binaire getallen uit te drukken door 4, 8, 32 of 64 binaire cijfers te gebruiken, zelfs als de eerste cijfers nul zijn. Dit komt ook door de manier waarop computers intern worden gebouwd.
Omdat de term
cijfer verwijst naar een veelvoud van tien, wordt een binair cijfer een bit genoemd. De term komt voort uit binair (b-) cijfer (-it).Acht bits vormen een byte. Een woord is meestal twee of vier bytes. Met zo'n kleine basis is het nodig om een groot aantal bits te gebruiken om getallen uit te drukken. Het is onhandig om een uitdrukking zoals 01111011
2 te gebruiken om een dergelijke alledaagse waarde uit te drukken als 123 10 . Programmeurs geven de voorkeur om nummers uit te drukken in eenheden van bytes of acht bits. Een enkelvoudig vier-bitscijfer is in feite basis 16, omdat vier bits tot elke waarde van 0 tot 15 kunnen uitdrukken. Basis 16 staat bekend als het
hexadecimale tellende systeem. Hexadecimaal wordt vaak gecontracteerd tot gewoon hex. Hexadecimaal gebruikt dezelfde cijfers voor de getallen 0 tot en met 9. Voor de cijfers tussen 9 en 16 gebruikt hexadecimaal de eerste zes letters van het alfabet: A voor 10, B voor 11, enzovoort. Dus, 123
10 wordt 7B 16 . 123 = 7 * 16
1 + B (ie, 11) * 16 0 = 7B 16 Omdat programmeurs de voorkeur geven aan getallen in 4, 8, 32 of 64 bits, geven ze ook de voorkeur aan hexadecimale getallen in 1, 2, 4 of 8 hexadecimale cijfers, zelfs als de eerste cijfers 0 zijn.
Tenslotte is het onhandig om een hexadecimaal getal zoals 7B uit te drukken < 16
met behulp van een subscript, omdat terminals geen subscripts ondersteunen. Zelfs in een tekstverwerker is het onhandig om lettertypen van en naar de subscriptmodus te wijzigen, alleen om twee cijfers in te voeren. Daarom gebruiken programmeurs de conventie om een hexadecimaal getal te beginnen met een 0x (de reden voor zo'n vreemde overtuiging gaat terug tot de vroege dagen van C). Dus wordt 7B 0x7B. Met behulp van deze conventie is 0x7B gelijk aan 123 (terwijl 0x123 gelijk is aan 291.) Alle wiskundige operators kunnen op hexadecimale getallen worden uitgevoerd op dezelfde manier als ze op decimale getallen worden toegepast. De reden dat we geen vermenigvuldiging zoals 0xC * 0xE in onze hoofden kunnen uitvoeren, heeft meer te maken met de vermenigvuldigingstabellen die we op school hebben geleerd dan met enige beperking in het getalsysteem.