Kalkulator programisty i kalkulator bitowy

Wpisz jedno wyrażenie, używając literałów szesnastkowych 0x, dwójkowych 0b i ósemkowych 0o, operatorów bitowych & | ^ ~, przesunięć << >> >>>, rotacji oraz zwykłej arytmetyki — wynik aktualizuje się na bieżąco jako dziesiętny, szesnastkowy, ósemkowy i dwójkowy przy rozmiarze słowa 8, 16, 32 lub 64 bity, ze znakiem lub bez. Poniżej znajdują się klikalna siatka bitów, panel operacji bitowych na dwóch operandach (AND / OR / XOR / NAND / NOR / NOT / przesunięcia / ROL / ROR) oraz ustawianie, zerowanie i przełączanie pojedynczego bitu. Do zwykłej konwersji systemów bez operacji bitowych służy Konwerter matematyczny, a do statystyki Kalkulator statystyczny.
Rozmiar słowa   Widok   Operatory: & | ^ ~ << >> >>> + - * / % ( ) — tylko arytmetyka całkowita, wyniki zawijają się przy rozmiarze słowa.
DEC
HEX
OCT
BIN
Bity są pokazane od najbardziej znaczącego; wyszarzone komórki leżą poza bieżącym rozmiarem słowa.
indeks bitu (0 = najmniej znaczący)
A =    B =  A i B przyjmują pełne wyrażenia (np. 1 << 12).
Tabela wyników pojawia się, gdy A i B zostaną poprawnie przetworzone. Przesunięcia i rotacje pobierają liczbę przesunięć z B.
Wypróbuj przykład:
Jak działają przesunięcia: << przycina wynik do rozmiaru słowa (bity wychodzące poza szczyt znikają). >>> jest zawsze przesunięciem logicznym (bez znaku). >> zależy od selektora Widok: arytmetyczne w trybie ze znakiem, logiczne w trybie bez znaku. Prywatność: cały kalkulator działa w tej karcie — bez serwera i bez zapisu.

Czym jest kalkulator programisty?

Kalkulator programisty wykonuje działania tak, jak komputer je przechowuje: w słowach o stałej długości. Zamiast jednej nieskończonej osi liczb, słowo 8-bitowe to okrąg 256 wartości, a słowo 32-bitowe — okrąg 4 294 967 296 wartości. Każdy wynik zostaje zawinięty z powrotem w ten okrąg, a te same bity można odczytać jako licznik bez znaku (0 … 255) albo jako wartość ze znakiem w uzupełnieniu do dwóch (-128 … 127). Cztery wiersze podstaw powyżej to te same bity przedstawione na cztery sposoby — edycja jednego wiersza aktualizuje pozostałe trzy.

Dlaczego programiści żyją w systemie szesnastkowym

Jedna cyfra szesnastkowa to dokładnie cztery bity, więc bajt to zawsze dwie cyfry szesnastkowe, a słowo 32-bitowe — zawsze osiem. Szesnastkowy zapis to system dwójkowy z zerami pogrupowanymi dla ludzkiego oka:

BinarnieHexDziesiętnie
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (lub -128 ze znakiem)

Uzupełnienie do dwóch w jednym akapicie

Aby odczytać słowo jako liczbę ze znakiem, spójrz na najwyższy bit. Jeśli wynosi 0, wartość to po prostu licznik bez znaku. Jeśli wynosi 1, odejmij rozmiar okręgu: 8-bitowe 0xFF to 255 − 256 = −1. To cała sztuczka — -x i 0 - x dają identyczne bity, dlatego ten sam układ sumujący działa dla obu. Zmiana znaku to "odwróć każdy bit i dodaj 1": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Operatory przesunięć w skrócie

OperatorNazwaprzykład 8-bitowy (a = 0xF0)
a << 1przesunięcie w lewo0xE0 — najwyższy bit wypada, zero wchodzi od dołu
a >> 1 (bez znaku)logiczne przesunięcie w prawo0x78 — zera wchodzą od góry
a >> 1 (ze znakiem, a = −16)arytmetyczne przesunięcie w prawo0xF8 = −8 — bit znaku jest kopiowany
a >>> 1zawsze logiczne0x78 niezależnie od selektora Widok
rol(a, 1)rotacja w lewo0xE1 — wypadły najwyższy bit wraca od dołu

Typowe błędy, których ta strona pomaga uniknąć

Przesunięcie arytmetyczne a logiczne: kopiowanie bitu znaku (arytmetyczne) i wypełnienie zerami (logiczne) różnią się zawsze, gdy najwyższy bit jest ustawiony — przełącz selektor Widok i zobacz, jak 0xF0 >> 1 zmienia się między 0x78 a 0xF8.
Niespodzianka 53 bitów: zwykły typ Number w JavaScript to liczba zmiennoprzecinkowa 64-bitowa z tylko 53 bezpiecznymi bitami całkowitymi, więc 0xFFFFFFFFFFFFFFFF nie da się przedstawić dokładnie — ta strona używa wewnętrznie dokładnej arytmetyki całkowitej 64-bitowej, więc każda widoczna cyfra szesnastkowa jest wiarygodna.
Pułapki zmiennoprzecinkowe: 0.1 + 0.2 w zmiennym przecinku daje znany wynik 0.30000000000000004; ten kalkulator jest z założenia tylko całkowity — dzielenie obcina w stronę zera, dokładnie jak / dla liczb całkowitych w C.
Zera wiodące: w starym C literał taki jak 052 oznaczał system ósemkowy. Tutaj liczba dziesiętna to zwykłe cyfry, a ósemkowa wymaga prefiksu 0o, więc nic nie jest dwuznaczne.

FAQ

Jaka jest największa liczba? — 64-bitowa bez znaku: 18 446 744 073 709 551 615 (0xFFFFFFFFFFFFFFFF); ze znakiem: ±9 223 372 036 854 775 808.
Dlaczego 1 << 8 dało 0? — rozmiar słowa to 8 bitów; bit 8 nie istnieje, a maska go odrzuca. Przełącz na 16/32/64 bity, aby go zachować.
Co robi ~? — negacja bitowa: każdy bit odwraca się w bieżącym rozmiarze słowa, więc ~0 to same jedynki (255 / 65535 / −1 …).
Czy jest arytmetyka zmiennoprzecinkowa? — nie, tylko całkowita; do liczb zmiennoprzecinkowych, trygonometrii i funkcji służy Kalkulator naukowy.
Czy coś opuszcza komputer? — nie: brak serwera, brak zapisu, brak analityki; po zamknięciu karty wszystko znika.