Калькулятор програміста і побітовий калькулятор

Введіть один вираз, використовуючи шістнадцяткові літерали 0x, двійкові 0b і вісімкові 0o, побітові оператори & | ^ ~, зсуви << >> >>>, обертання і звичайну арифметику — результат оновлюється в реальному часі як десятковий, шістнадцятковий, вісімковий і двійковий при розмірі слова 8, 16, 32 або 64 біти, зі знаком або без. Нижче — клікабельна сітка бітів, панель двооперандних побітових операцій (AND / OR / XOR / NAND / NOR / NOT / зсуви / ROL / ROR) і встановлення / очищення / перемикання одного біта. Для простого перетворення систем числення без побітової логіки дивіться Конвертер систем числення; для статистики — Калькулятор статистики.
Розмір слова   Подання   Оператори: & | ^ ~ << >> >>> + - * / % ( ) — лише цілочислова арифметика, результати загортаються за розміром слова.
DEC
HEX
OCT
BIN
Біти показано від старшого до молодшого; затемнені клітинки за межами поточного розміру слова.
індекс біта (0 = найменш значущий)
A =    B =  A і B приймають повні вирази (напр. 1 << 12).
Таблиця результатів з'являється, щойно A і B обидва розібрані. Зсуви і обертання беруть кількість з B.
Спробуйте приклад:
Як поводяться зсуви: << маскує результат до розміру слова (біти, що виходять за верх, зникають). >>> завжди є логічним (беззнаковим) зсувом. >> слідує вибору Перегляд: арифметичний у знаковому режимі, логічний у беззнаковому. Приватність: увесь калькулятор працює у цій вкладці — без сервера, без зберігання.

Що таке калькулятор програміста?

Калькулятор програміста виконує арифметику так, як комп'ютери її зберігають: у словах фіксованої ширини з бітів. Замість нескінченної числової прямої 8-бітове слово — це коло з 256 значень, 32-бітове — коло з 4 294 967 296. Кожен результат загортається назад у це коло, і ті самі біти можна прочитати як беззнаковий лічильник (0 … 255) або як знакове значення доповняльного коду двійки (-128 … 127). Чотири рядки систем числення вище — ті самі біти, показані чотирма способами: змініть один, і три інші слідують.

Чому програмісти живуть у шістнадцятковій системі

Одна шістнадцяткова цифра — рівно чотири біти, тож байт завжди складається з двох шістнадцяткових цифр, 32-бітне слово — з восьми. Шістнадцяткова система — це двійкова з перегрупованими нулями для людського ока:

ДвійковийHexДесятковий
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (або -128 зі знаком)

Доповняльний код двійки в одному абзаці

Щоб прочитати слово як знакове, подивіться на старший біт. Якщо він 0, значення — просто беззнаковий лічильник. Якщо 1, віднімають розмір кола: 8-бітний 0xFF дорівнює 255 − 256 = −1. У цьому весь трюк — -x і 0 - x дають однакові біти, тому той самий суматор працює для обох. Зміна знаку — це «інвертувати кожен біт, додати 1»: NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Оператори зсуву одним поглядом

ОператорНазва8-бітний приклад (a = 0xF0)
a << 1лівий зсув0xE0 — старший біт відпадає, нуль входить знизу
a >> 1 (без знаку)логічний правий зсув0x78 — нулі входять зверху
a >> 1 (зі знаком, a = −16)арифметичний правий зсув0xF8 = −8 — знаковий біт копіюється
a >>> 1завжди логічний0x78 незалежно від селектора Перегляд
rol(a, 1)обертання вліво0xE1 — відпалий старший біт повертається знизу

Типові помилки, яких допомагає уникнути ця сторінка

Арифметичний зсув проти логічного: копіювання знакового біта (арифметичний) і доповнення нулями (логічний) відрізняються, коли старший біт встановлено — змініть селектор Перегляд і спостерігайте, як 0xF0 >> 1 змінюється між 0x78 і 0xF8.
Сюрприз 53 біти: звичайний тип Number у JavaScript — 64-бітне число з плаваючою комою лише з 53 безпечними цілими бітами, тому 0xFFFFFFFFFFFFFFFF не можна подати точно — ця сторінка внутрішньо використовує точну 64-бітну цілочислову арифметику, тож кожна шістнадцяткова цифра, яку ви бачите, є надійною.
Пастки плаваючої коми: 0.1 + 0.2 відомо дає 0.30000000000000004 у плаваючій комі; цей калькулятор за задумом працює лише з цілими — ділення округлюється до нуля, точно як / у C для цілих.
Ведучі нулі: у старому C літерал на кшталт 052 означав вісімкове число. Тут десяткове — звичайні цифри, а вісімкове потребує префікса 0o, тож нічого не є неоднозначним.

Часті запитання (FAQ)

Яке найбільше число? — 64-бітне беззнакове: 18 446 744 073 709 551 615 (0xFFFFFFFFFFFFFFFF); знакове: ±9 223 372 036 854 775 808.
Чому 1 << 8 стало 0? — розмір слова 8 біт; біта 8 не існує, і маска його відкидає. Перейдіть на 16/32/64 біти, щоб зберегти його.
Що робить ~? — побітове НЕ: кожен біт перевертається в межах поточного розміру слова, тож ~0 — це всі одиниці (255 / 65535 / −1 …).
Чи є плаваюча кома? — ні, лише цілі; для плаваючої коми, тригонометрії та функцій використовуйте Науковий калькулятор.
Чи щось залишає мій комп'ютер? — ні: немає сервера, зберігання, аналітики; закрийте вкладку — і все зникне.