Cách Biểu Diễn Số Âm Trong Máy Tính

Máy tính biểu diễn số âm trong máy tính

Nhập số thập phân và chọn phương pháp biểu diễn để xem kết quả nhị phân

Hướng dẫn toàn diện về cách biểu diễn số âm trong máy tính

Trong khoa học máy tính, biểu diễn số âm là một khía cạnh cơ bản của hệ thống số nhị phân. Máy tính sử dụng các phương pháp khác nhau để biểu diễn cả số dương và số âm, mỗi phương pháp có ưu điểm và hạn chế riêng. Bài viết này sẽ khám phá chi tiết ba phương pháp chính: Dấu – Độ lớn (Sign-Magnitude), Bù 1 (One’s Complement), và Bù 2 (Two’s Complement), cùng với các ứng dụng thực tế của chúng.

1. Tại sao cần biểu diễn số âm?

Máy tính hiện đại cần xử lý cả số dương và số âm trong các phép tính số học. Không giống như con người có thể dễ dàng nhận biết dấu trừ (-), máy tính chỉ hiểu ngôn ngữ nhị phân (0 và 1). Do đó, các kỹ sư máy tính đã phát triển các hệ thống mã hóa khác nhau để biểu diễn cả hai loại số này bằng cách sử dụng chỉ các bit nhị phân.

2. Các phương pháp biểu diễn số âm

2.1. Dấu – Độ lớn (Sign-Magnitude)

Đây là phương pháp đơn giản nhất để biểu diễn số âm:

  • Bit trái cùng (MSB – Most Significant Bit) biểu thị dấu: 0 cho dương, 1 cho âm
  • Các bit còn lại biểu thị độ lớn (giá trị tuyệt đối) của số
  • Ví dụ: Số -5 trong hệ 8-bit sẽ là 10000101 (1 cho âm, 0000101 cho 5)
Số thập phân Biểu diễn 8-bit Giá trị thập phân
5 00000101 +5
-5 10000101 -5
0 00000000 +0
-0 10000000 -0

Ưu điểm: Dễ hiểu và triển khai đơn giản

Nhược điểm: Có hai biểu diễn cho số 0 (+0 và -0), làm phức tạp các phép so sánh

2.2. Bù 1 (One’s Complement)

Phương pháp này cải tiến Sign-Magnitude bằng cách:

  • Số dương được biểu diễn bình thường
  • Số âm là bù 1 của số dương tương ứng (đảo tất cả các bit)
  • Ví dụ: Số -5 trong hệ 8-bit: 00000101 (5) → 11111010 (-5)

Ưu điểm: Dễ dàng chuyển đổi giữa số dương và số âm

Nhược điểm: Vẫn có hai biểu diễn cho số 0, và phép cộng phức tạp hơn

2.3. Bù 2 (Two’s Complement)

Đây là phương pháp được sử dụng phổ biến nhất trong máy tính hiện đại:

  • Số dương được biểu diễn bình thường
  • Số âm được tính bằng cách lấy bù 1 rồi cộng 1
  • Ví dụ: Số -5 trong hệ 8-bit: 00000101 (5) → 11111010 (bù 1) → 11111011 (-5)
Số thập phân Biểu diễn 8-bit Phạm vi giá trị
127 01111111 -128 đến 127
-128 10000000
32767 01111111 11111111 -32768 đến 32767
-32768 10000000 00000000

Ưu điểm:

  • Chỉ có một biểu diễn cho số 0
  • Phép cộng và trừ đơn giản hóa
  • Phạm vi biểu diễn rộng hơn (thêm một số âm)

Nhược điểm: Phức tạp hơn trong việc chuyển đổi thủ công

3. So sánh các phương pháp biểu diễn

Tiêu chí Sign-Magnitude One’s Complement Two’s Complement
Số biểu diễn 0 2 (+0 và -0) 2 (+0 và -0) 1
Phạm vi số âm -(2n-1-1) đến 2n-1-1 -(2n-1-1) đến 2n-1-1 -2n-1 đến 2n-1-1
Độ phức tạp phần cứng Thấp Trung bình Cao
Hiệu suất phép toán Thấp Trung bình Cao
Sử dụng phổ biến Hiếm Hiếm Phổ biến

4. Ứng dụng thực tế của Two’s Complement

Two’s Complement được sử dụng rộng rãi trong:

  1. Bộ xử lý hiện đại: Hầu hết các CPU (x86, ARM, etc.) sử dụng Two’s Complement cho các phép toán số học
  2. Ngôn ngữ lập trình: Java, C, C++ và nhiều ngôn ngữ khác sử dụng Two’s Complement cho các kiểu dữ liệu số nguyên
  3. Mạng máy tính: Các giao thức như TCP/IP sử dụng Two’s Complement cho các trường checksum
  4. Hệ thống nhúng: Các vi điều khiển và hệ thống nhúng thường sử dụng Two’s Complement do hiệu quả phần cứng

5. Các vấn đề thường gặp và giải pháp

5.1. Tràn số (Overflow)

Khi kết quả của một phép toán vượt quá phạm vi có thể biểu diễn được. Ví dụ:

  • Trong hệ 8-bit Two’s Complement: 127 + 1 = -128 (tràn)
  • Giải pháp: Sử dụng độ dài bit lớn hơn (16-bit, 32-bit) hoặc kiểm tra tràn trước khi tính toán

5.2. Phép chia cho zero

Phép chia cho zero không được định nghĩa trong toán học và sẽ gây lỗi trong máy tính. Các hệ thống hiện đại thường:

  • Phát sinh ngoại lệ (exception)
  • Trả về giá trị đặc biệt (NaN – Not a Number)
  • Dừng chương trình với lỗi

5.3. Làm tròn và độ chính xác

Khi chuyển đổi giữa các hệ thống số khác nhau, có thể xảy ra mất mát độ chính xác:

  • Ví dụ: Số 0.1 trong hệ thập phân không thể biểu diễn chính xác trong nhị phân
  • Giải pháp: Sử dụng các thuật toán làm tròn phù hợp hoặc kiểu dữ liệu độ chính xác cao

6. Ví dụ thực hành

6.1. Chuyển đổi số -42 sang Two’s Complement 8-bit

  1. Viết số 42 trong nhị phân: 00101010
  2. Lấy bù 1 (đảo tất cả các bit): 11010101
  3. Cộng 1: 11010101 + 1 = 11010110
  4. Kết quả: -42 trong Two’s Complement 8-bit là 11010110

6.2. Phép cộng Two’s Complement

Tính 5 + (-3) trong hệ 4-bit:

  1. 5 trong 4-bit: 0101
  2. -3 trong 4-bit: 1101 (0011 → 1100 → 1101)
  3. Cộng nhị phân: 0101 + 1101 = 10010
  4. Bỏ bit tràn: 0010 (là 2 trong thập phân – kết quả đúng)

7. Tối ưu hóa biểu diễn số âm trong lập trình

Khi làm việc với số âm trong lập trình, có một số mẹo tối ưu hóa:

  • Sử dụng kiểu dữ liệu phù hợp: Chọn giữa signed và unsigned dựa trên nhu cầu
  • Kiểm tra tràn: Luôn kiểm tra phạm vi giá trị trước khi thực hiện phép toán
  • Sử dụng toán tử bit: Các toán tử như >> (dịch phải) và << (dịch trái) có hành vi khác nhau với số âm
  • Chuyển đổi kiểu cẩn thận: Khi chuyển đổi giữa các kiểu dữ liệu khác nhau, chú ý đến việc mất mát độ chính xác

Leave a Reply

Your email address will not be published. Required fields are marked *