2010-05-17 4 views
1

큰 숫자를 더 작은 숫자에서 빼면 차용이 필요합니다. carry 플래그는 빼기 연산 중에 차용 역할을합니다. 이제 56에서 66을 뺍니다. 차용이 필요하고 캐리 플래그가 설정됩니다. 이제 결과를 음수로 구별하는 방법, 결과를 얻기 위해이 빼기가 수행되는 방법 -10. 절차를 설명하십시오.캐리 플래그 및 빼기 문제

+2

66에서 56을 빼는 것은 10입니다. – WhirlWind

+4

2의 보수를 읽으십시오. http://en.wikipedia.org/wiki/Two%27s_complement – WhirlWind

답변

4

일반적으로 빼기는 음수로 구현 된 다음 추가됩니다. 예를 들어, CPU는 내부적으로 56을 사용하고 -66을 추가합니다. x86 (또는 대부분의 다른 최신 프로세서)에서 negate는 2의 보수로 수행됩니다. 즉, negate는 "모든 비트를 보완 한 다음 하나를 추가하고 수행을 무시하십시오"라는 의미입니다. 두 번째 피연산자로 변환

0011 1000 
- 0100 0010 
    --------- 

다음 :

complement bits: 1011 1101 
Increment:  1011 1110 

되도록 실행있어 동작은 :

이 결과는 부호없는 숫자로 (하나 (246)로 볼 수있다

0011 1000 
+ 1011 1110 
-------------- 
= 1111 0110 
) 또는 -10 (부호가있는 번호).

-1

컴퓨터에서이를 구분하지 않습니다. 컴퓨터는 기호에 대해 신경 쓰지 않는다. 이 값을 서명 된 변수에 저장 한 다음 서명 된 값으로 사용합니다. 긴 숫자와 음수 사이에는 의미 상의 차이가 없습니다.

3

2의 보수를 사용하는 컴퓨터는 필요하지 않습니다.

는의, 3 간단한 예를 살펴 보자 - 5 :

0011 = 3 
- 0101 = 5 
———————— 
    1110 = 14 

결과는 14이지만, 2의 보수,이 -2의 값도이다. 따라서 코드에서 부호가있는 유형을 사용하면 올바르게 -2가됩니다. 그렇지 않으면 14가됩니다. 프로그래머가 코드를 작성하는 방법에 따라 다릅니다.

1

컴퓨터에서 빼기를 수행하지 않습니다. 음수가 추가됩니다.

그래서 56-66 = 56 + (-66)

56 =를 0x38로 (16 진수 38)

-66 = 0xFFFFFFBE (32 비트 시스템으로 0x42의 보수)

이 16 진수를 추가하면 10 진수 0xA의 음수 인 0xFFFFFFF6이됩니다.

-2

캐리 플래그는 부호 비트와 동일하지 않습니다. carry 플래그는 하나 이상의 더하기 또는 빼기 결과가 다음 상위 부분에 영향을 주어야하는 다중 부분 산술을 수행하는 데 사용됩니다.

년 동안 레지스터 크기가 증가하고 엉덩이가 약 해지면 더 이상 이런 현상이 나타나지 않습니다.