Máy tính lập trình viên & máy tính bit

Gõ một biểu thức dùng ký hiệu hex 0x, nhị phân 0b và bát phân 0o, các toán tử bit & | ^ ~, dịch << >> >>>, xoay và phép toán số học thông thường — kết quả cập nhật trực tiếp dưới dạng thập phân, thập lục phân, bát phân và nhị phân với kích thước từ 8, 16, 32 hoặc 64 bit, có dấu hoặc không dấu. Bên dưới là lưới bit có thể nhấn, bảng phép toán bit hai toán hạng (AND / OR / XOR / NAND / NOR / NOT / dịch / ROL / ROR) và đặt / xóa / đảo một bit. Để chuyển đổi cơ số thuần túy không có phép toán bit, xem Chuyển đổi cơ số; để thống kê, xem Máy tính thống kê.
Kích thước từ   Chế độ xem   Toán tử: & | ^ ~ << >> >>> + - * / % ( ) — chỉ toán số nguyên; kết quả được bọc theo kích thước từ.
DEC
HEX
OCT
BIN
Các bit hiển thị từ bit quan trọng nhất; ô mờ nằm ngoài kích thước từ hiện tại.
chỉ số bit (0 = bit thấp nhất)
A =    B =  A và B nhận biểu thức đầy đủ (ví dụ 1 << 12).
Bảng kết quả xuất hiện khi A và B đều phân tích được. Dịch và xoay lấy số lần từ B.
Thử một ví dụ:
Cách dịch chuyển hoạt động: << cắt về kích thước từ (các bit tràn khỏi đỉnh sẽ mất). >>> luôn là dịch logic (không dấu). >> theo bộ chọn Xem: số học ở chế độ có dấu, logic ở chế độ không dấu. Quyền riêng tư: toàn bộ máy tính chạy trong tab này — không máy chủ, không lưu trữ.

Máy tính lập trình viên là gì?

Máy tính lập trình viên thực hiện số học theo cách máy tính lưu trữ: trong các từ có độ rộng cố định gồm các bit. Thay vì một trục số vô tận, một từ 8 bit là một vòng tròn 256 giá trị, một từ 32 bit là vòng tròn 4.294.967.296 giá trị. Mọi kết quả được bọc lại vào vòng tròn đó, và cùng các bit có thể được đọc như một số đếm không dấu (0 … 255) hoặc như giá trị bù hai có dấu (-128 … 127). Bốn hàng cơ số ở trên là cùng các bit được hiển thị bốn cách — sửa một hàng và ba hàng kia cập nhật theo.

Vì sao lập trình viên sống với thập lục phân

Một chữ số hex đúng bằng bốn bit, nên một byte luôn là hai chữ số hex, một từ 32 bit luôn là tám chữ số. Hex là nhị phân với các số 0 được nhóm lại cho mắt người dễ đọc:

Nhị phânHexThập phân
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (hoặc -128 có dấu)

Bù hai trong một đoạn

Để đọc một từ là có dấu, nhìn bit cao nhất. Nếu là 0, giá trị chỉ là số đếm không dấu. Nếu là 1, trừ đi kích thước vòng tròn: 0xFF 8 bit là 255 − 256 = −1. Đó là toàn bộ mẹo — -x và 0 - x cho ra cùng các bit, đó là lý do cùng phần cứng cộng hoạt động cho cả hai. Đổi dấu là "đảo mọi bit, rồi cộng 1": NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Các toán tử dịch nhìn nhanh

Toán tửTênVí dụ 8 bit (a = 0xF0)
a << 1dịch trái0xE0 — bit cao nhất rơi ra, số 0 vào từ đáy
a >> 1 (không dấu)dịch phải logic0x78 — số 0 vào từ đỉnh
a >> 1 (có dấu, a = −16)dịch phải số học0xF8 = −8 — bit dấu được sao chép
a >>> 1luôn là logic0x78 bất kể bộ chọn Xem
rol(a, 1)xoay trái0xE1 — bit cao nhất đã rơi quay lại từ đáy

Những lỗi thường gặp mà trang này giúp bạn tránh

Dịch số học so với dịch logic: sao chép bit dấu (số học) và đệm bằng số không (logic) khác nhau bất cứ khi nào bit cao nhất được bật — đổi bộ chọn Xem và xem 0xF0 >> 1 đổi giữa 0x78 và 0xF8.
Điều bất ngờ 53 bit: kiểu Number thông thường của JavaScript là số thực 64-bit chỉ có 53 bit nguyên an toàn, nên 0xFFFFFFFFFFFFFFFF không thể biểu diễn chính xác — trang này dùng số học nguyên 64-bit chính xác bên trong, nên mọi chữ số hex bạn thấy đều đáng tin.
Bẫy số thực: 0.1 + 0.2 nổi tiếng cho 0.30000000000000004 với số thực dấu phẩy động; máy tính này chỉ làm việc với số nguyên theo thiết kế — phép chia cắt về 0, giống hệt phép / của C trên số nguyên.
Số 0 đứng đầu: trong C cũ, một hằng như 052 nghĩa là bát phân. Ở đây thập phân là các chữ số thuần, còn bát phân cần tiền tố 0o, nên không có gì mơ hồ.

Câu hỏi thường gặp

Số lớn nhất là bao nhiêu? — 64-bit không dấu: 18.446.744.073.709.551.615 (0xFFFFFFFFFFFFFFFF); có dấu: ±9.223.372.036.854.775.808.
Vì sao 1 << 8 thành 0? — kích thước từ là 8 bit; bit 8 không tồn tại, và mặt nạ loại nó đi. Chuyển sang 16/32/64 bit để giữ lại.
~ làm gì? — NOT theo bit: mọi bit lật trong kích thước từ hiện tại, nên ~0 là toàn bit 1 (255 / 65535 / −1 …).
Có số thực dấu phẩy động không? — không, chỉ số nguyên; dùng Máy tính khoa học cho số thực, lượng giác và hàm.
Có gì rời khỏi máy tôi không? — không: không máy chủ, không lưu trữ, không phân tích; đóng tab là mọi thứ biến mất.