Inhoudsopgave:
Video: How to print out a number in binary format using C/C++ 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 niet echt af te rekenen met welke bits u gebruikt om cijfers weer te geven. Soms is het echter praktisch en handig om te sleutelen aan getallen op bitniveau - dus C ++ biedt een reeks operatoren voor dat doel.
De zogenaamde bitgewijs logische operatoren werken op hun argumenten op bitniveau. Om te begrijpen hoe ze werken, moet eerst worden onderzocht hoe computers variabelen opslaan.
Het systeem voor decimale getallen
De nummers waarmee u vertrouwd was vanaf het moment dat u voor het eerst op uw vingers kon tellen, staan bekend als decimale getallen omdat ze zijn gebaseerd op het getal 10. Over het algemeen geeft de programmeur C ++ -variabelen weer als decimale getallen. U zou dus de waarde van var kunnen opgeven als (zeg) 123, maar houd rekening met de implicaties.
Een getal zoals 123 verwijst naar 1 * 100 + 2 * 10 + 3 * 1. Al deze basisnummers - 100, 10 en 1 - zijn machten van 10.
123 = 1 * 100 + 2 * 10 + 3 * 1
Anders uitgedrukt (123) ziet er als volgt uit:
123 = 1 * 10 < 2 + 2 * 10 1 + 3 * 10 0 Houd er rekening mee dat
elk nummer tot het nulpunt 1 is. Andere getallensystemen
Wel, oke, het gebruik van 10 als basis (of
basis ) van ons telsysteem komt waarschijnlijk voort uit die 10 menselijke vingers, de oorspronkelijke telgereedschappen. Een alternatieve basis voor een telsysteem had net zo goed 20 kunnen zijn.
octaal systeem 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. Computers geven de voorkeur aan tellen met behulp van basis 2. Het getal 123
10
zou op deze manier worden uitgedrukt: 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 Computerconventie drukt binaire getallen uit met 4, 8, 16, 32 of zelfs 64 binaire cijfers, zelfs als de eerste cijfers 0 zijn.Dit komt ook door de manier waarop computers intern worden gebouwd. Omdat de term cijfer
verwijst naar een veelvoud van 10, wordt een
binair getal een bit (een afkorting van binair cijfer >). Een byte bestaat uit 8 bits. (Het oproepen van een binair cijfer een byte-it leek geen goed idee.) Geheugen wordt meestal gemeten in bytes (zoals rollen worden gemeten in eenheden van een dozijn van een bakker). Met zo'n kleine basis moet u een groot aantal bits gebruiken om getallen uit te drukken. Mensen willen niet dat het gedoe van het gebruik van een expressie zoals 011110112 zo'n alledaagse waarde uit te drukken als 123 10
. Programmeurs geven er de voorkeur aan om getallen uit te drukken door een even aantal bits te gebruiken. Het octale systeem - dat gebaseerd is op 3 bits - was het standaard binaire systeem in de begindagen van C. We zien hier nog een spoor van, een constante die begint met een 0 wordt octaal verondersteld in C ++. Dus, de regel: cout << "0173 =" << 0173 << endl; produceert de volgende uitvoer: 0173 = 123
Echter, octaal is bijna volledig vervangen door het
hexadecimale
-systeem, dat is gebaseerd op 4-bits cijfers.
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, zoals deze: 123 = 7 * 16 1 + B (ie 11) * 16 0
= 7B 16 Programmeurs geven de voorkeur aan hexadecimale getallen uit te drukken in veelvouden van 4 hexadecimale cijfers, zelfs als het eerste cijfer in elk geval 0 is. Tot slot, wie wil een hexadecimaal getal zoals 7B uitdrukken 16 door een subscript te gebruiken? Terminals ondersteunen
geen
subscripts. Zelfs op een tekstverwerker is het slepen om de lettertypen van en naar de subscript-modus te veranderen, gewoon om twee slechte cijfers te typen. Daarom gebruiken programmeurs (geen dwazen, zij) de conventie om een hexadecimaal getal met een 0x te beginnen. Dus wordt 7B 0x7B. Met deze conventie is het hexadecimale getal 0x7B gelijk aan 123 decimaal, terwijl 0x123 hexadecimaal gelijk is aan 291 decimaal. Het codefragment cout << "0x7B =" << 0x7B << endl; cout << "0x123 =" << 0x123 << endl; produceert de volgende uitvoer: 0x7B = 123 0x123 = 291
U kunt alle wiskundige operators op hexadecimale nummers gebruiken op dezelfde manier als u ze op decimale getallen toepast.
Als u het echt wilt, kunt u binaire getallen schrijven in C ++ '14 met het voorvoegsel '0b'. Dus 123 wordt 0b01111011.