Ohjelmoijan laskin & bittilaskin

Kirjoita yksi lauseke käyttäen 0x-heksadesimaali-, 0b-binääri- ja 0o-oktaaliliteraaleja, bittioperaattoreita & | ^ ~, siirtoja << >> >>>, kiertoja ja tavallista laskentaa — tulos päivittyy reaaliajassa desimaali-, heksadesimaali-, oktaali- ja binäärimuodossa 8, 16, 32 tai 64 bitin sanakoolla, etumerkillisenä tai etumerkittömänä. Alla on napsautettava bittiruudukko, kaksioperandinen bittipaneeli (AND / OR / XOR / NAND / NOR / NOT / siirrot / ROL / ROR) ja yksittäisen bitin asetus / tyhjennys / käännös. Pelkkään kantamuunnokseen ilman bittilogiikkaa katso Kantamuunnin; tilastoihin Tilastolaskin.
Sanan koko   Näkymä   Operaattorit: & | ^ ~ << >> >>> + - * / % ( ) — vain kokonaislukulaskenta, tulokset kääriytyvät sanakoon mukaan.
DEC
HEKSA
OCT
BIN
Bitit näytetään merkitsevimmästä alkaen; himmennetyt solut ovat nykyisen sanakoon ulkopuolella.
bittiindeksi (0 = vähiten merkitsevä)
A =    B =  A ja B hyväksyvät täydet lausekkeet (esim. 1 << 12).
Tulostaulukko ilmestyy, kun A ja B ovat molemmat jäsentyneet. Siirrot ja kierrot ottavat laskurin arvon B:stä.
Kokeile esimerkkiä:
Miten siirrot toimivat: << rajoittaa tuloksen sanakokoon (bitit, jotka putoavat ylhäältä, katoavat). >>> on aina looginen (etumerkitön) siirto. >> seuraa Näkymä-valitsinta: aritmeettinen etumerkillisessä tilassa, looginen etumerkittömässä tilassa. Yksityisyys: koko laskin toimii tässä välilehdessä — ei palvelinta, ei tallennusta.

Mikä on ohjelmoijan laskin?

Ohjelmoijan laskin laskee niin kuin tietokone tallentaa: kiinteän leveyden bittisanoissa. Sen sijaan että olisi yksi loputon lukusuora, 8-bittinen sana on 256 arvon ympyrä ja 32-bittinen sana 4 294 967 296 arvon ympyrä. Jokainen tulos kääritään takaisin tuohon ympyrään, ja samat bitit voidaan lukea etumerkittömänä lukumääränä (0 … 255) tai etumerkillisenä kahden komplementin arvona (-128 … 127). Yllä olevat neljä kantaluvun riviä ovat samat bitit neljällä tavalla — muokkaa yhtä, ja muut kolme seuraavat.

Miksi ohjelmoijat elävät heksadesimaalissa

Yksi heksadesimaalinumero on täsmälleen neljä bittiä, joten tavu on aina kaksi heksadesimaalinumeroa ja 32-bittinen sana aina kahdeksan. Heksadesimaali on binääriä, jossa nollat on ryhmitelty uudelleen ihmissilmälle:

BinääriHeksaDesimaali
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (tai -128 etumerkillisenä)

Kahden komplementti yhdessä kappaleessa

Sanan lukeminen etumerkillisenä: katso ylintä bittiä. Jos se on 0, arvo on pelkkä etumerkitön lukumäärä. Jos se on 1, vähennä kehän koko: 8-bittinen 0xFF on 255 − 256 = −1. Se on koko temppu — -x ja 0 - x tuottavat samat bitit, minkä vuoksi sama yhteenlaskupiiri toimii molemmille. Etumerkin vaihto on "käännä jokainen bitti, lisää 1": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Siirto-operaattorit yhdellä silmäyksellä

OperaattoriNimi8-bittinen esimerkki (a = 0xF0)
a << 1vasemmalle siirto0xE0 — ylin bitti putoaa pois, nolla tulee alhaalta
a >> 1 (etumerkitön)looginen oikeasiirto0x78 — nollat tulevat ylhäältä
a >> 1 (etumerkillinen, a = −16)aritmeettinen oikeasiirto0xF8 = −8 — etumerkkibitti kopioidaan
a >>> 1aina looginen0x78 riippumatta Näkymä-valitsimesta
rol(a, 1)kierto vasemmalle0xE1 — pudonnut ylin bitti tulee takaisin alhaalta

Yleiset virheet, joita tämä sivu auttaa välttämään

Aritmeettinen siirto vs looginen siirto: etumerkkibitin kopiointi (aritmeettinen) ja nollilla täyttäminen (looginen) eroavat aina, kun ylin bitti on asetettu — vaihda Näkymä-valitsinta ja katso, miten 0xF0 >> 1 muuttuu arvosta 0x78 arvoon 0xF8.
53-bittinen yllätys: JavaScriptin tavallinen Number-tyyppi on 64-bittinen liukuluku, jossa on vain 53 turvallista kokonaislukubittiä, joten 0xFFFFFFFFFFFFFFFF ei voi esittää tarkasti — tämä sivu käyttää sisäisesti tarkkaa 64-bittistä kokonaislukulaskentaa, joten jokainen näkemäsi heksadesimaalinumero on luotettava.
Liukulukuloukut: 0.1 + 0.2 antaa kuuluisasti liukuluvussa 0.30000000000000004; tämä laskin on suunniteltu vain kokonaisluvuille — jako pyöristyy kohti nollaa, täsmälleen kuten C:n / kokonaisluvuilla.
Etunollat: vanhassa C:ssä 052 tarkoitti oktaalia. Täällä desimaali on tavallisia numeroita ja oktaali vaatii 0o-etuliitteen, joten mikään ei ole epäselvää.

UKK

Mikä on suurin luku? — 64-bittinen etumerkitön: 18 446 744 073 709 551 615 (0xFFFFFFFFFFFFFFFF); etumerkillinen: ±9 223 372 036 854 775 808.
Miksi 1 << 8 muuttui arvoksi 0? — sanakoko on 8 bittiä; bitti 8 ei ole olemassa, ja maski pudottaa sen. Vaihda 16/32/64-bittiseen säilyttääkseen sen.
Mitä ~ tekee? — bittikohtainen NOT: jokainen bitti kääntyy nykyisen sanakoon sisällä, joten ~0 on kaikki ykköset (255 / 65535 / −1 …).
Onko liukulukua? — ei, vain kokonaisluvut; käytä Tieteellinen laskin liukuluvuille, trigonometrialle ja funktioille.
Lähteekö mitään koneelta? — ei: ei palvelinta, ei tallennusta, ei analytiikkaa; sulje välilehti, niin kaikki katoaa.