Programmer-lommeregner & bitvis lommeregner

Skriv ét udtryk med 0x-hex-, 0b-binære og 0o-oktale literaler, bitoperatorerne & | ^ ~, forskydninger << >> >>>, rotationer og almindelig regning — resultatet opdateres live som decimal, hexadecimal, oktal og binær ved en ordstørrelse på 8, 16, 32 eller 64 bit, med eller uden fortegn. Nedenfor finder man et klikbart bitgitter, et bitvist panel med to operander (AND / OR / XOR / NAND / NOR / NOT / forskydninger / ROL / ROR) og enkeltbit sæt / ryd / skift. Til ren talsystemkonvertering uden bitlogik, se Talsystemkonverter; til statistik, Statistiklommeregner.
Ordstørrelse   Visning   Operatorer: & | ^ ~ << >> >>> + - * / % ( ) — kun heltalsregning; resultater brydes ved ordstørrelsen.
DEC
HEX
OCT
BIN
Bits vises med den mest betydende først; nedtonede celler ligger uden for den aktuelle ordstørrelse.
bitindeks (0 = mindst betydende)
A =    B =  A og B accepterer hele udtryk (fx 1 << 12).
Resultattabellen vises, når både A og B kan læses. Forskydninger og rotationer tager antallet fra B.
Prøv et eksempel:
Sådan virker forskydninger: << maskerer tilbage til ordstørrelsen (bit, der falder ud i toppen, er væk). >>> er altid en logisk (usigneret) forskydning. >> følger vælgeren Visning: aritmetisk i tilstand med fortegn, logisk i tilstand uden fortegn. Privatliv: hele lommeregneren kører i denne fane — ingen server, ingen lagring.

Hvad er en programmer-lommeregner?

En programmer-lommeregner regner, sådan som computere gemmer tal: i faste ordbredder af bit. I stedet for en endeløs talakse er et 8-bit-ord en cirkel med 256 værdier, og et 32-bit-ord en cirkel med 4.294.967.296. Hvert resultat pakkes tilbage i den cirkel, og de samme bit kan læses som en usigneret tæller (0 … 255) eller som en signeret totalkomplement-værdi (-128 … 127). De fire talsystemrækker ovenfor er de samme bit gengivet på fire måder — redigeres én, følger de tre andre med.

Hvorfor programmører lever i hexadecimal

Ét hex-ciffer er præcis fire bit, så en byte er altid to hex-cifre, og et 32-bit-ord altid otte. Hex er binær med nullerne grupperet om, så mennesker kan læse det:

BinærHexDecimal
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (eller -128 med fortegn)

Totalkomplement på ét afsnit

For at læse et ord som signeret, kig på den øverste bit. Er den 0, er værdien blot den usignerede tæller. Er den 1, trækkes cirklens størrelse fra: en 8-bit 0xFF er 255 − 256 = −1. Det er hele tricket — -x og 0 - x giver identiske bit, og det er grunden til, at den samme adderkreds virker til begge. Fortegnsskiftet er "inverter hver bit, læg 1 til": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Forskydningsoperatorerne i korte træk

OperatorNavn8-bit-eksempel (a = 0xF0)
a << 1venstreforskydning0xE0 — øverste bit falder ud, nul kommer ind i bunden
a >> 1 (uden fortegn)logisk højreforskydning0x78 — nuller kommer ind i toppen
a >> 1 (med fortegn, a = −16)aritmetisk højreforskydning0xF8 = −8 — fortegnsbitten kopieres
a >>> 1altid logisk0x78 uanset visningsvalget
rol(a, 1)rotér venstre0xE1 — den faldne øverste bit kommer ind igen i bunden

Almindelige fejl, denne side hjælper med at undgå

Aritmetisk forskydning kontra logisk forskydning: at kopiere fortegnsbitten (aritmetisk) og fylde med nuller (logisk) er forskelligt, når den øverste bit er sat — skift Visning-vælgeren, og se 0xF0 >> 1 skifte mellem 0x78 og 0xF8.
Overraskelsen med 53 bit: JavaScripts almindelige Number-type er et 64-bit flydende punkt med kun 53 sikre heltalsbit, så 0xFFFFFFFFFFFFFFFF kan ikke repræsenteres præcist — denne side bruger internt præcis 64-bit heltalsregning, så hvert hex-ciffer, man ser, er troværdigt.
Fælder i flydende punkt: 0.1 + 0.2 giver berømt 0.30000000000000004 i flydende punkt; denne lommeregner er bevidst kun heltal — division trunkerer mod nul, præcis som C's / på heltal.
Foranstillede nuller: i gammel C betød et literal som 052 oktal. Her er decimal almindelige cifre, og oktal kræver præfikset 0o, så intet er tvetydigt.

Ofte stillede spørgsmål

Hvad er det største tal? — 64-bit uden fortegn: 18.446.744.073.709.551.615 (0xFFFFFFFFFFFFFFFF); med fortegn: ±9.223.372.036.854.775.808.
Hvorfor blev 1 << 8 til 0? — ordstørrelsen er 8 bit; bit 8 findes ikke, og masken fjerner den. Skift til 16/32/64 bit for at beholde den.
Hvad gør ~? — bitvis NOT: hver bit vendes inden for den aktuelle ordstørrelse, så ~0 er alle-ettaller (255 / 65535 / −1 …).
Findes der flydende punkt? — nej, kun heltal; brug Videnskabelig lommeregner til flydende punkt, trigonometri og funktioner.
Forlader noget maskinen? — nej: ingen server, ingen lagring, ingen analyse; luk fanen, og alt er væk.