2017-01-21 3 views
0

저는이 과제에서 무엇이 요청되는지 이해하지 못하고 누군가가 약간의 지침을 제공 할 수 있기를 희망합니다.2의 보수 16 진수 표현에 해당하는 정수 찾기

"다음 더블 2의 보수 진수 표현에 해당하는 진 정수 찾기 : 34 D7 CF 5B"나는 희망하고 어떤 일을 가정하는 안전

것은 즉 :

  1. 그 32 비트의 주요 전원이 3이기 때문에
  2. 그것은 포지티브 것이다 길거나 I가 두 이진 0011

될 예정 (틀릴 수도 둘) 두 가지 않음

방법 1과 방법 : 는 긍정적이다 가정 886,558,555

방법 2를 산출 12월

3*16^7 + 4*16^6 + ... + B*16^0 

로 진수로 변환 직진 :

Convert it to binary 
Flip the values (0 to 1 and 1 to 0) 
Add 1 
Yielding, in binary 1100 1101 0010 1000 0011 0000 1010 0101 
or in dec: -853004123 
+0

엔디안을 아는 것이 중요합니다. 그러나 예, 방법 1은 올바른 방법입니다. 방법 2는 음수에 대해서만 작동합니다 (분명히). – Jester

+0

단어가 16이라고 가정 할 때 32 비트입니다.프로세서가 많을 경우에도 마찬가지입니다. 부호 비트 (니블 (34)의 최상위)가 0이라는 사실은 2의 보수가 부적합하다는 것을 의미한다. 숫자는 양수입니다. – Gene

+0

여기서 2의 보수는 비트의 해석을 의미합니다 (비트가 0이기 때문에 실제로는 문제가되지 않습니다). 왜냐하면 그들은 당신이 그것을 사용하기를 원한다면 그들은 질문을 다르게했을 것입니다. (이것은 "방법 2"에서 보여 줬던) 연산의 이름이기도합니다. – harold

답변

0

2의 보수는 음수를 인코딩하는 특정 방법입니다.
양수를 음수로 만들거나 비표준으로 만들려면 모든 비트를 반전하고 1을 더하십시오.
추가 작업은 양방향으로 작동하므로 절대 빼는 일이 없습니다.

2의 보수 표기법에서 최상위 비트 (MSB)는 숫자가 음수인지 여부를 알려줍니다.
34 D7 CF 5B은 32 비트 숫자이며 (일반적이지 않은 30 비트 수가 아님) MSB가 0이므로 숫자가 양수입니다.

수없는 변환이 필요하지 않습니다 긍정적이며 우리는 단지 진수에서 소수점 표현을 계산할 수 있기 때문에 :

34 D7 CF 5B 
|| || || |+-> 11 * 16^0 = 11 
|| || || +--> 05 * 16^1 = 80 
|| || |+----> 15 * 16^2 = 3840 
etc. 

결과는 다음과 같습니다 이미 계산 한 886,558,555한다.

MSB를 음수로 설정하는 것은 반전입니다.
0에서 1을 빼고 임의의 수에서 더하거나 뺄 때 2의 보수가 올바르게 작동합니다. 오버 플로우의 경우에만 중단됩니다.

이 많은 CPU를 탐지하기 위해서는 피연산자의 MSB가 변경 될 때 설정되는 erflow 플래그가 있어야합니다.

2의 보수가 양수인 숫자는 다른 기호에서도 양수입니다. 서로 다른 시스템에서 인코딩 된 음수 일뿐입니다.

방법 2는 부호가 2의 보수를 반전하는 방법을 설명하지만 번호가 이미 양수이기 때문에 적용되지 않으므로 사용해서는 안됩니다.

관련 문제