Giống như hầu hết các giải thích tôi đã thấy, những điều trên đây rõ ràng về cách làm việc với phần bù 2, nhưng không thực sự giải thích chúng là gì về mặt toán học. Tôi sẽ cố gắng làm điều đó, ít nhất là cho các số nguyên, và tôi sẽ trình bày một số nền có lẽ quen thuộc trước tiên.
Nhớ lại cách nó hoạt động cho số thập phân:
2345
là cách viết
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0 .
Theo cùng một cách, nhị phân là cách viết số chỉ sử dụng 0 và 1 theo cùng một ý tưởng chung, nhưng thay thế 10 số trên bằng 2 giây. Sau đó, trong nhị phân,
1111
là cách viết
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
và nếu bạn làm việc đó, hóa ra là bằng 15 (cơ sở 10). Đó là bởi vì nó là
8 + 4 + 2 + 1 = 15.
Đây là tất cả tốt và tốt cho số dương. Nó thậm chí hoạt động cho các số âm nếu bạn sẵn sàng chỉ dán một dấu trừ trước mặt chúng, như con người làm với các số thập phân. Điều đó thậm chí có thể được thực hiện trong máy tính, nhưng tôi đã không thấy một chiếc máy tính như vậy từ đầu những năm 1970. Tôi sẽ để lại lý do cho một cuộc thảo luận khác.
Đối với máy tính, nó trở nên hiệu quả hơn khi sử dụng phần bù biểu diễn cho số âm. Và đây là một cái gì đó thường bị bỏ qua. Các ký hiệu bổ sung liên quan đến một số loại đảo ngược các chữ số của số, thậm chí các số không ngụ ý xuất hiện trước một số dương bình thường. Điều đó thật khó xử, bởi vì câu hỏi được đặt ra: tất cả chúng? Đó có thể là một số lượng vô hạn các chữ số được xem xét.
May mắn thay, máy tính không đại diện cho vô số. Các số bị ràng buộc với một chiều dài cụ thể (hoặc chiều rộng, nếu bạn thích). Vì vậy, hãy trở lại số nhị phân dương, nhưng với một kích thước cụ thể. Tôi sẽ sử dụng 8 chữ số ("bit") cho các ví dụ này. Vì vậy, số nhị phân của chúng tôi thực sự sẽ là
00001111
hoặc
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
Để tạo thành phần bù âm của 2, trước tiên, chúng tôi bổ sung tất cả các chữ số (nhị phân) để tạo thành
11110000
và thêm 1 vào mẫu
11110001
nhưng làm thế nào để chúng ta hiểu điều đó có nghĩa là -15?
Câu trả lời là chúng ta thay đổi ý nghĩa của bit thứ tự cao (cái ngoài cùng bên trái). Bit này sẽ là 1 cho tất cả các số âm. Thay đổi sẽ là thay đổi dấu hiệu đóng góp của nó thành giá trị của số mà nó xuất hiện. Vì vậy, bây giờ 11110001 của chúng tôi được hiểu là đại diện
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Lưu ý rằng "-" trước biểu thức đó? Nó có nghĩa là bit dấu mang trọng lượng -2 7 , nghĩa là -128 (cơ sở 10). Tất cả các vị trí khác giữ nguyên trọng số họ có trong số nhị phân không dấu.
Làm việc -15 của chúng tôi, đó là
-128 + 64 + 32 + 16 + 1
Hãy thử trên máy tính của bạn. đó là -15.
Trong ba cách chính mà tôi đã thấy các số âm được biểu thị trong máy tính, phần bổ sung của 2 sẽ giúp bạn thuận tiện trong sử dụng chung. Nó có một sự kỳ lạ, mặc dù. Vì nó là nhị phân, nên phải có một số chẵn các kết hợp bit có thể. Mỗi số dương có thể được ghép với số âm của nó, nhưng chỉ có một số không. Phủ định số 0 giúp bạn bằng không. Vì vậy, có thêm một kết hợp, số có 1 trong bit dấu và 0 ở mọi nơi khác. Số dương tương ứng sẽ không phù hợp với số lượng bit được sử dụng.
Điều kỳ lạ hơn nữa về con số này là nếu bạn cố gắng hình thành số dương của nó bằng cách bổ sung và thêm một số, bạn sẽ nhận lại số âm tương tự. Có vẻ tự nhiên là số 0 sẽ làm điều này, nhưng điều này thật bất ngờ và hoàn toàn không phải là hành vi mà chúng ta đã từng sử dụng vì máy tính sang một bên, chúng ta thường nghĩ đến việc cung cấp không giới hạn các chữ số, không phải là số học có độ dài cố định này.
Đây giống như đỉnh của một tảng băng kỳ lạ. Có nhiều lời nói dối chờ đợi bên dưới bề mặt, nhưng thế là đủ cho cuộc thảo luận này. Bạn có thể có thể tìm thấy nhiều hơn nếu bạn nghiên cứu "tràn" cho số học điểm cố định. Nếu bạn thực sự muốn tham gia vào nó, bạn cũng có thể nghiên cứu "số học mô-đun".