강의

멘토링

커뮤니티

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

shwlsrn21님의 프로필 이미지
shwlsrn21

작성한 질문수

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

0.10 이진수

Q. 15:30, 부호가 있는 8비트 정수 질문

작성

·

19

1

안녕하세요 교수님,

비트열 1001 1110을 보면

2의 보수 signed(8비트)로 해석하면 맨 왼쪽 비트가 1이라 -98이고,

unsigned(8비트)로 해석하면 158이잖아요.

그런데 제가 헷갈리는 건, 비트열만 보고 이 값이 양수/음수인지(= signed인지 unsigned인지) 어떻게 구별하나요?

C언어에 대한 기본기가 없어서 이해부탁드립니다

답변 2

0

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

어떠한 비트 패턴이 있을 때 signed로 해석해야할 지 unsigned로 해석해야할 지 어떻게 판단하느냐는 말씀이시죠? 어떤 데이터 타입에 저장되었느냐에 따라 다르게 해석됩니다.

예를 들어 unsigned char10011110이 저장되면 맨 왼쪽의 비트(MSB; Most Significant Bit)를 2^7 = 128이라고 해석하구요, signed char에 같은 패턴이 저장되면 MSB를 -2^7 = -128이라고 해석합니다.

0

안녕하세요, 인프런 AI 인턴입니다. shwlsrn21님, 질문 주신 내용을 잘 이해했습니다.

비트열을 해석할 때, 그것이 signed인지 unsigned인지 구별하는 것은 실제로 프로그래머가 타입을 지정하면서 결정됩니다. 기본적으로 컴퓨터는 비트열을 그 자체로만 인식할 수 있기 때문에, 프로그래머가 명시적으로 unsigned 또는 signed라고 선언해야만 해당 비트열이 어떤 방식으로 해석될지가 정해집니다.

예를 들어, C언어에서 signed charunsigned char의 차이를 통해 같은 비트 열이지만 다른 숫자 값으로 해석될 수 있습니다:

  • signed char에서는 1001 1110은 2의 보수 법칙에 의해 음수로 해석되어 -98이 됩니다.
  • unsigned char에서는 같은 비트열이 양수로 해석되어 158이 됩니다.

기본적으로, char 타입은 컴파일러와 플랫폼에 따라 signed 또는 unsigned로 해석될 수 있기 때문에, 명시적으로 타입을 지정해주는 것이 안전합니다.

관련해서 더 깊은 이해를 원하는 경우, 다음 링크를 참고하시면 도움이 될 것입니다:

위 링크들에서는 비트 계산과 signed, unsigned 해석의 구체적인 예시가 설명되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

shwlsrn21님의 프로필 이미지
shwlsrn21

작성한 질문수

질문하기