인프런 커뮤니티 질문&답변

vice versa님의 프로필 이미지
vice versa

작성한 질문수

홍정모의 따라하며 배우는 C언어

1.1 C언어의 탄생

2의 보수 방법에서 양수표현법

작성

·

440

1

강의에서 설명해주신 2의 보수 방법에서, 양수를 표현하는 방법에 관해 질문이 있습니다. 강의에서 -5를 예로 드신 건 이해했는데, 반대로 5를 표현하려 할 때는 어떻게 되나요?

5를 2진수로 변환->00000101(2)

->보수:11111010(2)

->더하기 1: 11111011(2)

인데, 그럼 양수 5와 음수 -5의 구분이 안 되지 않나요?

강의에서 첫 비트가 1이면 음수, 0이면 양수인 것으로 구분한다고 하셨는데, 8개 비트 앞에 부호에 해당하는 1비트를 더 둔다는 뜻인가요? 그러니까, (1/11111011->-5, 0/11111011->5) 이런 식으로 작동하는 건가요?

좋은 강의 감사합니다.

답변 1

1

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

네, 마지막에 말씀해주신 내용이 맞습니다.

2의 보수 방법을 이용하여 정수를 표현할 때, 실제로 양수와 음수를 구분하는 것은 가장 앞쪽의 비트, 즉, 최상위 비트를 통해 이루어집니다.
최상위 비트가 0 이면 양수, 1 이면 음수로 해석됩니다.

이 때, 양수를 표현할 때는 별도의 보수 과정을 거치지 않고, 직접적으로 2진수로 변환한 값을 사용합니다.

 

예를 들어, 5 를 8비트(편의를 위해) 2진수로 표현하면 다음과 같습니다.

: 0000 0101 , 이 경우, 최상위 비트가 0 이므로 양수로 해석됩니다.

 

반면에, -5 를 8비트 2진수로 표현할 때는 다음과 같이 2의 보수 과정을 거칩니다.

  • 5 의 2진수 표현을 구합니다 : 0000 0101

  • 모든 비트를 반전시킵니다 : 1111 1010

  • 반전된 값에 1 을 더합니다 : 1111 1011

이 경우, 최상위 비트가 1 이므로, 음수로 해석되어 -5 의 값을 표현하는 것입니다.

 

즉, 최상위 비트가 부호를 나타내며, 나머지 비트들이 실제 값을 표현합니다.

 

vice versa님의 프로필 이미지
vice versa
질문자

감사합니다! 그런데 설명하신 방법대로라면 -5와 1111 1011=251의 구분이 안되는데, 이 문제는 어떻게 해결하는 건가요?

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

부호있는 정수 자료형에 담긴 1111 1011 값에 대해서, 최상위 비트1 이므로 음수로 해석하기 위해 2의 보수 과정을 거칩니다.

즉, 111 1011 에 대한 비트 반전 000 0100 이후, 1 을 더하여 0000 0101 이 되고, 이 값은 5 가 됩니다.

이러한 과정을 통해 -5 로 해석됩니다.

 

vice versa님의 프로필 이미지
vice versa

작성한 질문수

질문하기