Có một nền tảng toán học thuần túy, đây là một chút toán học hơn cho bất cứ ai quan tâm.
Nếu chúng ta bắt đầu với một số nguyên có dấu và không dấu 8 bit, về cơ bản chúng ta có các số nguyên modulo 256, cho đến khi có liên quan đến phép nhân và phép nhân, thì cung cấp phần bù 2 được sử dụng để biểu diễn các số nguyên âm (và đây là cách mà mọi bộ xử lý hiện đại thực hiện) .
Trường hợp mọi thứ khác nhau ở hai nơi: một là hoạt động so sánh. Theo một nghĩa nào đó, các số nguyên modulo 256 được coi là một vòng tròn số (giống như các số nguyên modulo 12 thực hiện trên mặt đồng hồ analog kiểu cũ). Để làm cho các so sánh số (là x <y) có ý nghĩa, chúng tôi cần phải quyết định số nào nhỏ hơn số khác. Từ quan điểm của nhà toán học, chúng tôi muốn nhúng số nguyên modulo 256 vào tập hợp tất cả các số nguyên bằng cách nào đó. Ánh xạ số nguyên 8 bit có biểu diễn nhị phân là tất cả các số 0 thành số nguyên 0 là điều hiển nhiên phải làm. Sau đó, chúng ta có thể tiến hành ánh xạ những cái khác sao cho '0 + 1' (kết quả của việc hủy đăng ký, giả sử ax và tăng nó lên một, thông qua 'inc ax') đi đến số nguyên 1, v.v. Chúng ta có thể làm tương tự với -1, ví dụ ánh xạ '0-1' sang số nguyên -1 và '0-1-1' đến số nguyên -2. Chúng tôi phải đảm bảo rằng phần nhúng này là một hàm, vì vậy không thể ánh xạ một số nguyên 8 bit đơn thành hai số nguyên. Như vậy, điều này có nghĩa là nếu chúng ta ánh xạ tất cả các số vào tập hợp số nguyên thì 0 sẽ ở đó, cùng với một số số nhỏ hơn 0 và một số hơn 0. Về cơ bản có 255 cách để thực hiện điều này với số nguyên 8 bit (theo đến mức tối thiểu bạn muốn, từ 0 đến -255). Sau đó, bạn có thể định nghĩa 'x <y' theo thuật ngữ '0 <y - x'.
Có hai trường hợp sử dụng phổ biến, trong đó hỗ trợ phần cứng là hợp lý: một trường hợp có tất cả các số nguyên khác không lớn hơn 0 và một trường hợp có khoảng cách chia 50/50 khoảng 0. Tất cả các khả năng khác có thể được mô phỏng dễ dàng bằng cách dịch các số thông qua thêm 'thêm và phụ 'trước khi hoạt động và nhu cầu này rất hiếm khi tôi không thể nghĩ ra một ví dụ rõ ràng trong phần mềm hiện đại (vì bạn chỉ có thể làm việc với một lớp phủ lớn hơn, giả sử là 16 bit).
Vấn đề khác là ánh xạ một số nguyên 8 bit vào không gian của các số nguyên 16 bit. -1 có đến -1 không? Đây là những gì bạn muốn nếu 0xFF có nghĩa là đại diện cho -1. Trong trường hợp này, mở rộng đăng nhập là điều hợp lý để làm, do đó 0xFF chuyển sang 0xFFFF. Mặt khác, nếu 0xFF có nghĩa là đại diện cho 255, thì bạn muốn nó được ánh xạ thành 255, do đó thành 0x00FF, thay vì 0xFFFF.
Đây cũng là điểm khác biệt giữa các hoạt động 'dịch chuyển' và 'dịch chuyển số học'.
Cuối cùng, tuy nhiên, thực tế là int trong phần mềm không phải là số nguyên, mà là các biểu diễn dưới dạng nhị phân và chỉ một số có thể được biểu diễn. Khi thiết kế phần cứng, các lựa chọn phải được thực hiện để thực hiện phần cứng. Vì với phần bù của 2, các phép toán cộng và nhân giống hệt nhau, nên thể hiện các số nguyên âm theo cách này. Sau đó, nó chỉ là vấn đề của các hoạt động phụ thuộc vào số nguyên mà biểu diễn nhị phân của bạn có nghĩa là đại diện.