2010-08-10 47 views
10

Tôi hiện đang đọc một cuốn sách về "chút không quan trọng" và công thức sau sẽ xuất hiện:x-y = x + ¬y + 1 vấn đề

x-y = x+¬y+1 

Nhưng điều này dường như không làm việc. Ví dụ:

x = 0100 
y = 0010 
x-y = 0010 
¬y = 1101 
¬y+1 = 1110 
x+1110 = 10010 

Nhưng 10010 != 0010...

tôi đã làm ở đâu là một sai lầm (nếu có)?

(Cuốn sách này là "Hacker's Delight" bởi Henry S. Warren.)

+1

Lưu ý rằng đây không phải là quá nhiều "chút không quan trọng" vì nó là [ "định nghĩa của phép trừ"] (http://en.wikipedia.org/wiki/ Hai% 27s_complement) –

Trả lời

23

Bạn chỉ có hệ thống bốn bit! Thêm 1 ở bên trái kết quả cuối cùng của bạn không thể tồn tại. Nó phải là:

x = 0100 
y = 0010 
~y = 1101 
~y + 1 = 1110 
x + 1110 = 0010 

Các bit khác tràn, và không phải là một phần của kết quả của bạn. Bạn có thể muốn đọc lên trên two's complement arithmetic.

+0

Cảm ơn bạn rất nhiều :) Giải thích tốt. Cảm ơn tất cả những người khác. – 0x90

2

Bạn đang triển khai các bit thêm. Trong máy tính thực nếu bạn tràn từ, bit biến mất. (thực sự nó được lưu trong một lá cờ mang theo.).

2

Giả sử các số bị hạn chế thành 4 bit, thì số thứ năm 1 sẽ bị cắt bớt, để lại cho bạn 0010.

1

Đó là tất cả về tràn. Bạn chỉ có bốn bit, vì vậy nó không 10010, nhưng 0010.

1

Chỉ cần để thêm vào các câu trả lời, trong hệ thống bổ sung của 2:

~x + 1 = -x 

Say x = 2. Trong 4 bit, đó là 0010.

~x = 1101 
~x + 1 = 1110 

1110 là -2

Các vấn đề liên quan