작성
·
646
답변 2
5
음수 플래그를 이용해 음수를 표현하는 것도 방법일 수 있습니다. 다만 2의 보수 표현에 비해 안좋은 점들도 있습니다.
일단 2의 보수 표현에서는 덧셈과 뺄셈 연산이 더 단순해집니다. 음수+양수이든, 양수+양수이든, 음수+음수이든, 양수+음수이든 모든 연산 과정이 같습니다. 하지만 음수 플래그를 사용하는 경우에는 덧셈과 뺄셈에 대한 별도의 로직이 필요해집니다.
그리고 음수 플래그를 사용하는 경우에는 어쩔 수 없이 부호 표현을 위해 하나의 비트를 할애해야 합니다. 다시 말해 표현할 수 잇는 수의 범위가 줄어들 수 있습니다.
0
이진수만 봐서는 음수인지 양수인지 판단하기 어려워서 음수 양수 구분하기 위해 플래그를 사용한다 (p.59, p.106)
책에 살짝 헷갈리게 적혀있긴 한데, 제가 알기론 2진수만 봐도 음수인지 양수인지 데이터의 타입이 명시되어 있다면 실제로 컴퓨터는 구분을 할 겁니다.
예를 들면 8비트짜리 데이터가 있다고 할 때,
unsigned (음수 존재 X) 타입의 데이터라면 데이터의 범위가 0~255가 되지만,
signed (음수 존재 O) 타입의 데이터라면 데이터의 범위가 -128~127 입니다.
signed 타입의 자료형인데 숫자가 128이 넘어간다? 즉, 최상위 비트가 1 이다 (1XXX XXXX 형태) 하면 무조건 음수이고 보수의 형태로 봅니다.
근데 ALU에서 연산한 직후에는 연산자에서 데이터를 내보낼 때 타입형을 알 수 없어서? 부호 플래그를 사용해야 하나 봅니다. (저도 이 부분은 잘 모르겠습니다)