Kết nối qua MCP →

Nhập phép tính

Công thức

Quảng cáo

Kết quả

Two's Complement Binary (8-bit)
11111011
biểu diễn bù 2
Giá trị không dấu 251
Giá trị có dấu -5
Độ rộng bit 8 bit

Máy tính bù 2 là gì?

Bù 2 (two's complement) là cách chuẩn mà máy tính dùng để lưu các số nguyên có dấu. Công cụ này chuyển bất kỳ số thập phân nào sang dạng biểu diễn nhị phân bù 2 theo độ rộng bit bạn chọn (4, 8, 16 hoặc 32 bit), đồng thời hiển thị cả giá trị không dấu của chuỗi bit lẫn giá trị có dấu mà các bit đó đại diện.

Cách sử dụng

Nhập một số thập phân — dương hoặc âm — rồi chọn độ rộng bit. Công cụ sẽ lấy số đó theo modulo \(2^{n}\), tạo ra đúng chuỗi bit mà CPU thực sự lưu trữ. Nó cũng cho bạn biết chuỗi bit đó giải mã ra giá trị có dấu nào, nhờ vậy bạn có thể kiểm tra lại quá trình chuyển đổi qua lại.

Giải thích công thức

Với một trường n bit, giá trị không dấu được tính bằng \(u = ((x \bmod 2^{n}) + 2^{n}) \bmod 2^{n}\).

$$\text{Unsigned} = \left(\,\text{Decimal} \bmod 2^{\text{Bits}}\,\right),\qquad \text{Signed} = \begin{cases} \text{Unsigned} & \text{Unsigned} < 2^{\,\text{Bits}-1} \\[4pt] \text{Unsigned} - 2^{\text{Bits}} & \text{otherwise} \end{cases}$$

Công thức này "cuộn" số âm vòng lại: trong 8 bit, −5 trở thành \(256 - 5 = 251\), có dạng nhị phân là 11111011. Để giải mã chuỗi bit ngược về giá trị có dấu, hãy xét bit cao nhất (MSB): nếu bit này bằng 1 (tức \(u \ge 2^{n-1}\)), giá trị là \(u - 2^{n}\); nếu không, giá trị đơn giản là \(u\). Một cách lấy số đối tương đương là đảo tất cả các bit rồi cộng thêm một: \(\sim x + 1\).

Number line showing unsigned values wrapping into signed positive and negative ranges
Values at or above 2^(n-1) wrap to negative; the upper unsigned half maps to negative signed numbers.

Ví dụ minh họa

Chuyển −5 sang bù 2 dạng 8 bit. Bước 1: \(2^{8} = 256\). Bước 2: \(u = ((-5 \bmod 256) + 256) \bmod 256 = 251\). Bước 3: 251 ở dạng nhị phân là 11111011. Vì MSB bằng 1 nên giá trị có dấu là \(251 - 256 = -5\), đúng với số ban đầu.

Step diagram converting a negative decimal to two's complement binary
Two's complement of a negative value: invert the bits of the magnitude, then add one.

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

Nếu số của tôi quá lớn so với độ rộng bit thì sao? Nó sẽ cuộn vòng (tràn) theo modulo \(2^{n}\), y hệt cách phần cứng xử lý. Ví dụ, 300 trong 8 bit trở thành \(300 - 256 = 44\).

Vì sao giá trị không dấu khác với giá trị có dấu? Cùng một chuỗi bit có thể được đọc theo hai cách. Cách không dấu coi mọi bit đều là dương; cách có dấu coi bit cao nhất mang trọng số âm.

Công cụ có hỗ trợ 64 bit không? Công cụ này hỗ trợ tới các độ rộng phổ biến 32 bit nhằm giữ kết quả nằm trong giới hạn độ chính xác an toàn.

Cập nhật lần cuối: