2014-09-02 2 views
1

시스템 번호에 대해 몇 가지 연습 문제를 수행하고있었습니다. 모든 것이 잘 작동했지만 16 진수 시스템 (16 진수)에서 더 작은 숫자에서 더 큰 숫자를 뺍니다.더 작은 숫자에서 큰 숫자를 뺍니다 (16 진수)

(1234 - ABEF) 내가 그렇게하기 시작했습니다.

4 - F = 5 (borrow 16 from 3 so it becomes 2) 
2 - E = 4 (borrow 16 from 2 so it becomes 1) 
1 - B = 6 (borrow 16 from 1 so it becomes 0) 
0 - A = ? I don't know what to do here ? where should I borrow from ? 

나는 온라인 계산기를 사용하고 나에게 최종 답을 알려줍니다 입니다 (1234 - ABEF = FFFF6645)

감사합니다

답변

1

가에서 빌려 아무것도 없기 때문에 결과는 부정이된다 .

온라인 계산기는 32 비트 부호있는 값을 사용한다는 가정하에 더 작은 숫자에서 더 큰 숫자를 빼기 때문에 1234에서 ABEF를 빼고 FFFF6645, 일명 십진법 -39355.

사이드 노트 : Windows 사용자는 내장 계산기를 사용하여 "프로그래머"보기에서 계산할 수 있습니다.

0

논리에는 뺄셈이없고, 뺄셈은 덧셈으로 끝납니다. 기억해야 할 것은 2를 보완하면 "1을 반전하고 더합니다." 십진수 연산을 할 때 99 + 3을 더하면 첫 번째 열은 9 + 3 = 2가됩니다.이 숫자는 맨 위에있는 캐리 슬롯으로 이동합니다. 두 번째 열 1 (캐리) + 9 (첫 번째 피연산자) +0 (두 번째 피연산자에 대한 placholder). 0은 1이되고, 3 번째 열은 1 + 0 + 0 = 1이며, 0을 전달하면 완료라고 부를 수 있습니다. 3 개의 행, 캐리, 첫 번째 피연산자, 두 번째 피연산자를 시각화 할 수 있습니다. 첫 번째 열에 캐리 슬롯을 사용할 수 있습니다. 이제 바이너리를 생각해보십시오. 열과 바이너리에서 똑같은 수학을 할 수 있습니다 (16 진수는 4 비트 그룹으로, 연필과 종이로 이것을 수행하면 16 진수를 개별 비트로 나눕니다). 그래서 우리는 학교에서 a + b = a + (-b) 우권을 알고 있고 우리는 이진수 -b가 두 개의 보수가 반전되어 하나를 더한다는 것을 압니다. 그래서 만약 당신이 단순히 반전하여 두 번째 피연산자로 사용한다면, 첫 번째 열의 캐리 슬롯에 1이 더해 지므로 0x1234 - 0xABEF는 0x1234 + (-0xABEF) = 0x1234 +와 같습니다. ~ 0xABEF) + 1 = 0x(~ 0x0ABEF) +1 (일부 패딩 추가) = 0xxF5410 + 1 = 0xF6645. 또는 16 비트로 자르려면 0x6645입니다. 32 비트를 수행하면 0xFFFF6645, 64 비트 0xFFFFFFFFFFFF6645가됩니다. 십진수 99 + 3 = 100 또는 0100 또는 00000000100처럼 숫자로 채우기를 원하는 위치에 따라 다릅니다.

0x1234 - 0x0005 = 0xxFFFFA + 1 = 0x01224를 수행하면 어떻게 될까요? 왼쪽 패딩은 0입니다. 빌려 줄 사람이 없었다. 다른 숫자는 빌린 것이고, 왼편은 영원한 것입니다. 또는 그것을 생각하는 또 다른 방법은 부정적인 대답입니다. 바이너리의 음수 값은 반전되어 하나를 오른쪽에 추가합니다. 따라서 0x001은 0xFFFFF ... FFFFE를 사용하여 alu 또는 레지스터에있는 비트 수만큼 더한 다음 0xFFFF .... FFFF를 얻습니다. 8 비트 레지스터 0xFF, 16 비트 0xFFFF, 32 0xFFFFFFFF이면. 위의 0xFFFF ... FF6645와 동일합니다. 그것을 뒤집고 0x99BA + 1 = 0x99BB = 39355 또는 실제로 -39355를 하나 더 추가하십시오.

0x1234 = 4660, 0xABEF = 44015, 계산기에서 4460 - 44015 = -39355.

관련 문제