Bộ nhớ của máy tính được chia thành các vị trí lưu trữ nhỏ được gọi là byte. Một byte chỉ đủ bộ nhớ để lưu một chữ cái trong bảng chữ cái hoặc một số nhỏ. Mỗi byte được chia thành tám vị trí lưu trữ nhỏ hơn được gọi là bit. Thuật ngữ bit là viết tắt của chữ số nhị phân.
Chúng ta ai cũng biết rõ dữ liệu được biểu diễn trong máy tính dưới dạng mã nhị phân gồm 2 ký tự 0 và 1, và số cũng được biểu diễn như vậy. Trong bài này ta sẽ tìm hiểu kỹ hơn về cách máy tính lữu trữ số và vì sao cần phải lưu trữ như vậy.
Số nguyên
Để dễ dàng cho việc biểu diễn bằng hình ảnh, ta ví dụ với một bộ nhớ chỉ bao gồm 1 byte tương đương với 8 bit, và số 22+25+26=100 được biểu diễn như sau:
Nếu dùng toàn bộ ô nhớ để biểu diễn số thì bộ nhớ này cho phép ta biểu diễn 256 số, từ 0 đến 255.
Nhưng nếu cần phải biểu diễn cả số âm thì ý tưởng đầu tiên là ta sẽ để dành 1 ô nhớ cho việc lưu trữ dấu, phần còn lại dành để lưu trữ giá trị. Cách này được gọi là Sign-and-magnitude
Mới nghe, cách này có vẻ dễ hiểu và có thể dùng được luôn, ta có thể lưu trữ được các giá trị từ -127 đến 127, à nhưng sao lại chỉ còn có 255 số ? Ta đã bị mất 1 số ở đâu? Tìm hiểu kỹ lại thì hóa ra ta có tận 2 cách biểu diễn số 0
Một điều bất tiện nữa xảy ra đó là lưu trữ như thế này khiến việc thực hiện các phép cộng, trừ cơ bản không còn theo quy luật được nữa. Ta không thể thực hiện việc cộng bit theo bit.
Để giải quyết vấn đề cộng bit, người ta mới nghĩ ra cách mới với tên gọi là One’s complement (bù 1) để khắc phục các nhược điểm trên, đó là vẫn giữ bit đầu tiên để lưu trữ dấu, nhưng với số âm thì đảo ngược toàn bộ bit lại. Hay thực chất là số dương và âm là 2 phiên bản đảo ngược hoàn toàn của nhau
Nhưng rõ ràng, vấn đề về số 0 vẫn còn đó. Chúng ta vẫn có 2 cách biểu diễn số 0 là 00000000 và 11111111.
Tiếp tục cải tiến để xử lý vấn đề này, cuối cùng ta có phương pháp Two’s complement (bù 2) cũng chính là cách mà các số được lưu trữ hiện nay. Bit đầu tiên sẽ không chỉ biểu diễn dấu mà là phần âm của giá trị bit lớn nhất.
Với cách này chúng ta có:
- chỉ có 1 biểu diễn duy nhất cho số 0
- tổng số giá trị được biểu diễn là 256 (28) từ -28 đến 28-1
- các phép cộng, trừ được thực hiện theo bit từ phải sang trái một cách tự nhiên tương tự như chúng ta được học trong trường với hệ thập phân
Ví dụ: -5 + 2 = -3 1111 1011 + 0000 0010 =========== 1111 1101