2012-03-01 35 views
10

Tôi đang tham gia khóa học ngôn ngữ lắp ráp và tổ chức máy tính. Phần viết của phòng thí nghiệm của chúng tôi trong tuần này có một câu hỏi về nó khiến tôi bối rối. Câu hỏi đọc ...Trừ số nhị phân chưa ký lớn khỏi số nhỏ hơn

Trừ các số nhị phân không dấu sau (hiển thị bit vay và tràn). Không chuyển đổi thành phần bổ sung của hai.

0101 0111 1101 
-1110 1011 0110 
-------------- 

Tôi nhận ra rằng câu trả lời là -1001 0011 1001 nhưng tôi đang gặp một thời gian khó khăn cố gắng tìm ra cách để mượn để thực sự thực hiện phép trừ này bằng cách lấy số lượng lớn và trừ nó ra khỏi số lượng nhỏ hơn và hiển thị công việc của tôi. Toàn bộ cuộc sống của tôi khi trừ một số lượng lớn từ một số nhỏ tôi đã đảo ngược vấn đề và thay vào đó trừ số nhỏ hơn từ số lớn hơn và thêm một dấu âm trước kết quả. Tôi hỏi giáo sư và ông nói rằng ông muốn vấn đề được giải quyết theo cách nó được viết. Tôi không được phép giải quyết điều này bằng cách trừ số nhỏ hơn khỏi số lớn hơn và phủ nhận như tôi thường làm. Tôi đã không thể tìm thấy bất kỳ ví dụ trực tuyến trừ một số nhị phân unsigned lớn hơn từ một số nhỏ hơn.

Tôi thực sự đánh giá cao nếu ai đó có thể mô tả cho tôi cách thực hiện phép trừ trong trường hợp này.

Cập nhật: @Alex là chính xác. Giáo sư đang tìm kiếm

0110 1100 0111 (1735) 

Cảm ơn mọi người.

+2

Bạn có chắc chắn rằng anh ta không muốn '0110 1100 0111' với một dấu hiệu của một số bit vay và một bit tràn? – Beta

+0

@Beta: Không, câu trả lời là '-1001 0011 1001' (-2361). Anh ấy chỉ làm việc với các số nhị phân bình thường, không phải là một đại diện máy tính cụ thể như phần bù 2. –

+0

Tôi không chắc liệu giáo sư có sau khi -1001 0011 1001 (-2361) hoặc 0110 1100 0111 (1735), tôi đã kết thúc với 1735. Tôi nghĩ rằng @Beta là đúng. Tôi sẽ đăng lại với những gì ông đang tìm kiếm khi phòng thí nghiệm được trao lại. –

Trả lời

7

Bạn thực hiện theo cách tương tự, bất kể số nào lớn hơn và số nào nhỏ hơn.

bb b  bb <- borrows 
0101 0111 1101 (1405) 
-1110 1011 0110 (3766) 
-------------- 
0110 1100 0111 (1735?) 

Bây giờ, nếu bạn muốn có một sự khác biệt thích hợp, bạn cần phải đưa vào tài khoản tràn kể từ khi kết quả trên chưa bao gồm các bit dấu:

b bb b  bb <- borrows 
0 0101 0111 1101 (1405) 
-0 1110 1011 0110 (3766) 
---------------- 
1 0110 1100 0111 (-2361 signed 2's complement) 

Thực sự, CPU không chăm sóc những gì được trừ từ những gì. Nó sử dụng cùng một thuật toán cho phép cộng/trừ số nguyên, hơn thế nữa, thuật toán này là giống nhau cho các số nguyên đã ký và không dấu. Bạn chỉ phải giải thích chính xác kết quả và cờ mang và tràn. Đó là tất cả.

+1

-1 anh ấy nói cụ thể anh ấy không làm việc trong phần bổ sung của 2 –

+0

Cảm ơn Alex. Tôi nghi ngờ rằng ví dụ hàng đầu của bạn là những gì giáo sư là sau. Đó là những gì tôi tiếp tục nhận được khi cố gắng giải quyết vấn đề. Tôi nghĩ rằng đó có thể là điểm của vấn đề ... để cho thấy rằng phép trừ không mang lại kết quả đúng trong kịch bản này. Tôi nghĩ rằng tôi chỉ đang tiếp cận vấn đề từ suy nghĩ sai lầm. –

+0

@ BlueRaja-DannyPflughoeft: Anh ấy nói "Không chuyển đổi thành phần bổ sung của hai." và tôi đã không chuyển đổi bất cứ thứ gì. –

-1

chỉ cần trừ hai số nhị phân như cũ, sau đó lấy phần bổ sung 2 của kết quả. thì đấy!

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