Nó được thực hiện sao cho việc bổ sung không cần phải có logic đặc biệt nào để xử lý các số âm. Kiểm tra bài viết trên Wikipedia .
Giả sử bạn có hai số, 2 và -1. Trong của bạn theo cách "trực quan" đại diện cho số, họ sẽ 0010
và 1001
tương ứng (tôi gắn bó với 4 bit cho kích thước). Theo cách bổ sung của hai , chúng là 0010
và 1111
. Bây giờ, hãy nói rằng tôi muốn thêm chúng.
Bổ sung hai là rất đơn giản. Bạn thêm số bình thường và bất kỳ bit mang nào ở cuối sẽ bị loại bỏ. Vì vậy, họ được thêm vào như sau:
0010
+ 1111
=10001
= 0001 (discard the carry)
0001
là 1, là kết quả mong đợi của "2 + (- 1)".
Nhưng trong phương pháp "trực quan" của bạn, việc thêm phức tạp hơn:
0010
+ 1001
= 1011
Đó là -3, phải không? Bổ sung đơn giản không hoạt động trong trường hợp này. Bạn cần lưu ý rằng một trong các số là âm và sử dụng thuật toán khác nếu đó là trường hợp.
Đối với phương pháp lưu trữ "trực quan" này, phép trừ là một hoạt động khác với phép cộng, yêu cầu kiểm tra bổ sung về các số trước khi chúng có thể được thêm vào. Vì bạn muốn các thao tác cơ bản nhất (cộng, trừ, v.v.) càng nhanh càng tốt, bạn cần lưu trữ các số theo cách cho phép bạn sử dụng các thuật toán đơn giản nhất có thể.
Ngoài ra, trong phương thức lưu trữ "trực quan", có hai số không:
0000 "zero"
1000 "negative zero"
Đó là trực giác cùng một số nhưng có hai giá trị khác nhau khi được lưu trữ. Mỗi ứng dụng sẽ cần thực hiện các bước bổ sung để đảm bảo rằng các giá trị khác không cũng không âm 0.
Có một phần thưởng khác với việc lưu trữ int theo cách này và đó là khi bạn cần mở rộng độ rộng của thanh ghi, giá trị đang được lưu trữ. Với hai phần bù, lưu trữ số 4 bit trong thanh ghi 8 bit là vấn đề lặp lại điều ý nghĩa nhất:
0001 (one, in four bits)
00000001 (one, in eight bits)
1110 (negative two, in four bits)
11111110 (negative two, in eight bits)
Đó chỉ là vấn đề nhìn vào bit dấu của từ nhỏ hơn và lặp lại cho đến khi nó đệm chiều rộng của từ lớn hơn.
Với phương thức của bạn, bạn sẽ cần xóa bit hiện có, đây là thao tác bổ sung ngoài phần đệm:
0001 (one, in four bits)
00000001 (one, in eight bits)
1010 (negative two, in four bits)
10000010 (negative two, in eight bits)
Bạn vẫn cần đặt thêm 4 bit đó trong cả hai trường hợp, nhưng trong trường hợp "trực quan", bạn cũng cần phải xóa bit thứ 5. Đây là một bước bổ sung nhỏ trong một trong những hoạt động cơ bản và phổ biến nhất có trong mọi ứng dụng.