Trong môi trường lập trình C trên nền tảng 32-bit, việc hiểu rõ cách biểu diễn số nguyên là yếu tố then chốt. Xét trường hợp biến a (kiểu int), b (kiểu short), và c (kiểu int). Khi a = 127, b = -9, kết quả của phép gán c = a + b sẽ được phân tích như sau:
| Kiểu dữ liệu | Độ dài bit | Phương pháp lưu trữ |
|---|---|---|
| int | 32 | Bù hai (số có dấu) |
| short | 16 | Bù hai (số có dấu) |
Quy trình chuyển đổi bù hai
- Số dương: Giữ nguyên giá trị nhị phân. Ví dụ: 12710 = 011111112
- Số âm:
- Duy trì bit dấu
- Đảo bit phần giá trị
- Cộng 1 vào kết quả
Biểu diễn giá trị cụ thể
- a = 127 (int 32-bit):
00000000 00000000 00000000 01111111 → 0x0000007F
- b = -9 (short 16-bit):
11111111 11110111 → 0xFFF7
Quy tắc mở rộng dấu khi thực hiện phép toán
Khi thực hiện c = a + b, trình biên dịch sẽ mở rộng b từ 16-bit thành 32-bit:
- Số âm: Điền bit 1 vào các bit cao
- Số dương: Điền bit 0 vào các bit cao
a (32-bit): 00000000 00000000 00000000 01111111 (0x0000007F) b mở rộng: 11111111 11111111 11111111 11110111 (0xFFFFFFF7) ------------------------------------------------ Tổng: 1 00000000 00000000 00000000 01110110
Bit tràn cao nhất bị loại bỏ, kết quả thực tế: 00000000 00000000 00000000 01110110 (0x00000076)
Kiểm chứng bằng hệ thập lục phân
FFFFFFF7 (-9 mở rộng) + 0000007F (127) ----------- 100000076 → Loại bỏ bit tràn → 00000076
Kết quả 11810 nằm trong phạm vi biểu diễn của kiểu int (±2,147,483,647), không xảy ra tràn số.
Bảng chuyển đổi nhị phân - thập lục phân
| Nhị phân | Thập lục phân |
|---|---|
| 0111 | 7 |
| 1111 | F |
Quy tắc: Nhóm 4 bit nhị phân từ phải sang trái, điền số 0 khi cần thiết.