Để biểu diễn số Âm trong máy tính thông thường người ta sử dụng phương pháp Bù 2.
Topic này được viết để bổ sung kiến thức cho Topic https://tranduythanh.com/2012/01/01/cac-vi-d%E1%BB%A5-v%E1%BB%81-java-assignment-operator/ (Java Assignment Operator)
Theo phương pháp này, bit cực trái hay còn gọi là bit nằm bên trái cùng của byte được sử dụng làm bit dấu ( là bit tượng trung cho dấu của số – sign bit). Người ta quy ước: Nếu bit dấu là 0 thì số là số dương, nếu bit dấu là 1 thì số là số âm. Ngoài bit dấu này ra, các bit còn lại được dùng để biểu diễn độ lớn của số.
Ví dụ 1:
Tôi lấy số -45 ở hệ thập phân, số này sẽ được biểu diễn trong máy tính theo phương pháp bù 2 như sau ( Tôi chọn mẫu 8 bit):
Bước 1: Xác định số nguyên 45 ở hệ thập phân được biểu diễn trong máy tính là : 0010 1101
Bước 2: Đảo tất cả các bit nhận được ở bước 1. Kết quả bạn sẽ được: 1101 0010
Bước 3: Cộng thêm 1 vào kết quả thu được ở bước 2. Kết quả sau khi cộng: 1101 0011
Bước 4: Vì là biểu diễn số âm nên bit cực trái luôn giữ là 1.
Vậy với phương phá bù 2, số -45 ở hệ thập phân được biểu diễn trong máy tính như sau: 1101 0011
Ví dụ 2:
Tôi lấy số nguyên -5 ở hệ thập phân, nó sẽ được biểu diễn trong máy tính theo phương pháp bù 2 như sau ( cũng lấy mẫu 8 bit):
Bước 1: Xác định số nguyên 5 ở hệ thập phân được biểu diễn dạng nhị phân trong máy tính như sau: 0000 0101
Bước 2: Đảo tất cả các bit nhận được ở bước 1. Ta được như sau: 1111 1010
Bước 3: Cộng thêm 1 vào kết quả thu được ở bước 2, ta được: 1111 1011.
Bước 4: Vì là biểu diễn số âm nên bit cực trái luôn giữ là 1
Như vậy với phương pháp bù 2 thì số -5 ở hệ thập phân được biểu diễn trong máy tính như sau: 1111 1011
Để giúp các bạn hiểu rõ hơn, Tôi sẽ thực hiện 2 phép cộng số thập phân âm (<0) cho các bạn xem:
Ví dụ 3: Cộng số -5 với số 2 (mẫu 8 bit):
Trước tiên bạn phải đổi -5 thành số nhị phân trong máy tính theo phương pháp Bù 2. Tức là bạn sẽ có số 1111 1011
Số 2 bạn biểu diễn thành nhị phân, bạn cũng sẽ được 0000 0010
Bây giờ Tôi sẽ cộng 2 số nhị phân này lại như sau:
1 1 1 1 1 0 1 1
+
00 00 0 0 1 0
———————-
1 1 1 1 1 1 0 1
Bây giờ tự nhiên Tôi hỏi bạn, số nhị phân 1 1 1 1 1 1 0 1 thì số thập phân của nó là số mấy? Bạn sẽ trả lời như thế nào? Trước tiến phải xác định nó là số Âm bởi vì bit cực trái của nó là số 1. Để biết nó là số mấy thì ta tiến hành đảo bit như sau:
1 1 1 1 1 1 0 1 => 00000010
Tiến hành cộng thêm 1 vào 00000010, như vậy ta được 00000011. Ta đổi qua hệ thập phân = 2^1 +2^0 =2+1 =3, cộng với dấu đằng trước của nó là dấu Âm, do đó 1 1 1 1 1 1 0 1 sẽ có giá trị là -3
Ví dụ 4: Tôi sẽ cộng số -5 với -7 (cũng dùng mẫu 8 bit)
Cũng dùng phương pháp bù 2 để biểu diệ n-5 và -7 thành số nhị phân, Số -5 bạn đã biết nó có giá trị 1111 1011. Còn số -7 nếu bạn chưa biết biểu diễn thì bạn chưa hiểu cách tính, bạn phải coi lại 4 bước bên trên. Coi lại mà chưa hiểu tiếp thì chắc ăn Tôi sẽ biểu diện lại cho bạn xem bên dưới:
Bước 1: Xác định số nguyên 7 bên hệ thập phân được biểu diễn sang nhị phân là: 0000 0111
Bước 2: Đảo tất cả các bit nhận được từ bước 1, ta sẽ được: 1111 1 000
Bước 3: Cộng 1 vào kết quả nhận được ở bước 2, ta được: 1111 1001
Bước 4: Vì là số âm nên bit cực trái là 1
Như vậy số -7 được biểu diễn đưới dạng nhị phân trong máy tính là: 1111 1001
Bây giờ ta tiến hành Cộng -5 và -7
1111 1011
+
1111 1001
—————–
1111 0100
Bạn để ý rằng, khi cộng 2 bit cực trái của 2 số trên, ta vẫn còn nhớ 1, Nhưng mà trong kết quả này ta bỏ bit dấu này đi
Bây giờ cũng tương tự, Tôi hỏi lại các bạn số nhị phân 1111 0100 thì số thập phân của nó là bao nhiêu?
Tôi sẽ một lần nữa làm lại cho các bạn: Tiến hành đảo bit 1111 0100 bạn sẽ được 0000 1011 , sau đó cộng 1 vào ta được 0000 1100
Như vậy bạn sẽ được 2^3+ 2^2 =8+4=12, với bit dấu là âm, Tức là ta được kết quả -12.
Chúc các bạn Thành Công.