Programmeurrekenmachine & bitrekenmachine

Typ één expressie met 0x-hexadecimale, 0b-binaire en 0o-octale letterlijke waarden, de bitsgewijze operatoren & | ^ ~, verschuivingen << >> >>>, rotaties en gewone rekenkunde — het resultaat wordt live bijgewerkt als decimaal, hexadecimaal, octaal en binair bij een woordgrootte van 8, 16, 32 of 64 bits, ondertekend of niet-ondertekend. Hieronder vindt u een klikbaar bitraster, een bitsgewijs paneel met twee operanden (AND / OR / XOR / NAND / NOR / NOT / verschuivingen / ROL / ROR) en zetten / wissen / omwisselen van enkele bits. Voor gewone grondtalconversie zonder bitlogica zie de Wiskundige omzetter; voor statistiek de Statistiekrekenmachine.
Woordgrootte   Weergave   Operatoren: & | ^ ~ << >> >>> + - * / % ( ) — alleen rekenkunde met gehele getallen; resultaten worden afgerond op de woordgrootte.
DEC
HEX
OCT
BIN
Bits worden meest-significant eerst getoond; grijze cellen liggen buiten de huidige woordgrootte.
bitindex (0 = minst significant)
A =    B =  A en B accepteren volledige expressies (bijv. 1 << 12).
De resultatentabel verschijnt zodra A en B beide kunnen worden geparseerd. Verschuivingen en rotaties nemen het aantal van B.
Probeer een voorbeeld:
Zo gedragen verschuivingen zich: << maskeert terug naar de woordgrootte (bits die boven eruit vallen zijn weg). >>> is altijd een logische (niet-ondertekende) verschuiving. >> volgt de keuze Weergave: rekenkundig in ondertekende modus, logisch in niet-ondertekende modus. Privacy: de hele rekenmachine draait in dit tabblad — geen server, geen opslag.

Wat is een programmeurrekenmachine?

Een programmeurrekenmachine rekent zoals computers het opslaan: in woorden van vaste breedte uit bits. In plaats van één eindeloze getallenlijn is een woord van 8 bits een cirkel van 256 waarden, een woord van 32 bits een cirkel van 4.294.967.296. Elk resultaat wordt terug in die cirkel gewikkeld, en dezelfde bits kunnen worden gelezen als een niet-ondertekende telling (0 … 255) of als een ondertekende waarde in complement van twee (-128 … 127). De vier grondtalrijen hierboven zijn dezelfde bits op vier manieren weergegeven — bewerk er één en de andere drie volgen.

Waarom programmeurs in hexadecimaal leven

Eén hexadecimaal cijfer is precies vier bits, dus een byte is altijd twee hexadecimale cijfers, een woord van 32 bits altijd acht. Hexadecimaal is binair met de nullen anders gegroepeerd voor menselijke ogen:

BinairHexDecimaal
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (of -128 ondertekend)

Complement van twee in één alinea

Om een woord als ondertekend te lezen, kijkt u naar het bovenste bit. Is het 0, dan is de waarde gewoon de niet-ondertekende telling. Is het 1, dan trekt u de grootte van de cirkel af: een 8-bits 0xFF is 255 − 256 = −1. Dat is de hele truc — -x en 0 - x geven identieke bits, waardoor dezelfde optelschakeling voor beide werkt. Het omkeren van het teken is "inverteer elk bit, tel 1 op": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

De verschuivingsoperatoren in het kort

OperatorNaam8-bits voorbeeld (a = 0xF0)
a << 1verschuiving naar links0xE0 — het bovenste bit valt eruit, een nul komt onderaan binnen
a >> 1 (niet-ondertekend)logische verschuiving naar rechts0x78 — nullen komen bovenaan binnen
a >> 1 (ondertekend, a = −16)rekenkundige verschuiving naar rechts0xF8 = −8 — het tekenbit wordt overgenomen
a >>> 1altijd logisch0x78 ongeacht de keuze Weergave
rol(a, 1)rotatie naar links0xE1 — het uitgevallen bovenste bit komt onderaan terug binnen

Veelgemaakte fouten die deze pagina helpt voorkomen

Rekenkundige versus logische verschuiving: het overnemen van het tekenbit (rekenkundig) en opvullen met nullen (logisch) verschillen telkens wanneer het bovenste bit gezet is — wissel de keuze Weergave en zie 0xF0 >> 1 wisselen tussen 0x78 en 0xF8.
De verrassing van 53 bits: het gewone getaltype van JavaScript is een float van 64 bits met slechts 53 veilige gehele bits, dus 0xFFFFFFFFFFFFFFFF kan niet exact worden voorgesteld — deze pagina gebruikt intern exacte rekenkunde met gehele getallen van 64 bits, zodat elk hexadecimaal cijfer dat u ziet betrouwbaar is.
Valkuilen van drijvende komma: 0.1 + 0.2 geeft in drijvende komma beruchte 0.30000000000000004; deze rekenmachine werkt bewust alleen met gehele getallen — delen rondt af naar nul, precies zoals de / van C op gehele getallen.
Voorloopnullen: in oud C betekende een letterlijke waarde als 052 octaal. Hier zijn decimalen gewone cijfers en heeft octaal het voorvoegsel 0o nodig, dus niets is dubbelzinnig.

Veelgestelde vragen

Wat is het grootste getal? — niet-ondertekend 64-bit: 18.446.744.073.709.551.615 (0xFFFFFFFFFFFFFFFF); ondertekend: ±9.223.372.036.854.775.808.
Waarom werd 1 << 8 nul? — de woordgrootte is 8 bits; bit 8 bestaat niet en het masker laat het vallen. Schakel naar 16/32/64 bits om het te behouden.
Wat doet ~? — bitsgewijs NIET: elk bit wordt omgedraaid binnen de huidige woordgrootte, dus ~0 is alles-enen (255 / 65535 / −1 …).
Is er drijvende komma? — nee, alleen gehele getallen; gebruik de Wetenschappelijke rekenmachine voor floats, goniometrie en functies.
Verlaat er iets mijn computer? — nee: geen server, geen opslag, geen analyse; sluit het tabblad en alles is weg.