2012-03-01 3 views
10

저는 컴퓨터 조직과 어셈블리 언어 과정을 수강하고 있습니다. 이번 주에 우리 연구실의 서면 부분에는 저에게 문제가되는 질문이 있습니다. 문제는 ... 읽고작은 하나에서 큰 부호없는 2 진수를 뺍니다.

빼기 다음 부호 이진 숫자는 (차용 및 오버 플로우 비트를 보여줍니다). 2의 보수로 변환하지 마십시오.

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

나는 대답은 -1001 0011 1001 것을 깨닫게하지만 난 더 큰 숫자를 복용하고,에서를 뺀 실제로 빼기를 수행하기 위해 대출하는 방법을 알아 내려고 힘든 시간을 보내고있어 작은 숫자와 내 작품을 보여줍니다. 작은 숫자에서 큰 숫자를 뺄 때 내 인생은 문제를 거스 르고 큰 숫자에서 더 작은 숫자를 빼고 그 결과 앞에 음수 기호를 추가했습니다. 나는 교수에게 물었고 그는 문제가 그것이 쓰여지는 방식으로 해결되기를 원한다고 말한다. 나는 더 큰 숫자에서 더 작은 숫자를 빼고 내가 평소처럼 부정을함으로써 이것을 풀 수 없다. 나는 더 작은 것에서 더 큰 부호가없는 2 진수를 뺀 어떤 예도 온라인으로 찾을 수 없었다.

누군가이 시나리오에서 뺄셈을 수행하는 방법을 설명 할 수 있다면 정말 고마워 할 것입니다.

업데이트 : @Alex가 맞습니다. 교수님이 찾고 계셨습니까

0110 1100 0111 (1735) 

감사합니다.

+2

일부 차용 비트와 오버플로 비트의 표시로 '0110 1100 0111'을 원하지 않습니까? – Beta

+0

@ 베타 : 대답은 '-1001 0011 1001' (-2361)입니다. 그는 2의 보수와 같은 특별한 컴퓨터 표현이 아니라 일반적인 2 진수로 작업하고 있습니다. –

+0

교수가 -1001 0011 1001 (-2361)이나 0110 1100 0111 (1735) 이후에 있었는지 확실하지 않습니다. 1735로 끝났습니다. @Beta가 옳다고 생각합니다. 나는 실험실을 돌려 주었을 때 찾고 있던 것을 다시 게시 할 것이다. –

답변

7

어떤 숫자가 더 크고 작을지라도 같은 방식으로 수행합니다. 당신이 적절한 변화를 원하는 경우

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

이제, 위의 결과는 부호 비트가 포함되어 있지 않기 때문에 계정에 오버 플로우를 취할 필요가 : 정말

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

를, CPU는하지 않습니다 무엇에서 무엇이 빠져 나오는지 신경 써라. 정수 가산/감산에 대해서도 같은 알고리즘을 사용합니다. 게다가이 알고리즘은 부호 첨부 정수 및 부호 없음 정수에 대해서 같습니다. 결과와 캐리 및 오버플로 플래그 만 올바르게 해석하면됩니다. 그게 다야.

+1

-1 그가 특별히 2의 보수로 작동하지 않는다고 말했습니다. –

+0

감사합니다. Alex. 당신의 가장 좋은 본보기가 교수가 무엇인지 궁금합니다. 그게 내가 문제를 해결하려고 할 때 얻은 것입니다. 나는 그것이 문제의 핵심이었을지도 모른다고 생각한다. 뺄셈이이 시나리오에서 올바른 결과를 가져 오지 않는다는 것을 보여주는 것이다. 나는 잘못된 사고 방식으로 문제에 접근하고 있다고 생각합니다. –

+0

@ BlueRaja-DannyPflughoeft : 그는 "2의 보수로 변환하지 마십시오."라고했습니다. 나는 아무것도 개조하지 않았다. –

-1

은 2 진수를 그대로 뺀 다음 결과의 2의 보수를 취합니다. 짜잔!

관련 문제