인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

dlgigi324님의 프로필 이미지
dlgigi324

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 9장] Signed / Unsigned 를 이해하고 연산 실수를 피해보기 (내가 원한 결과 값이 안나와..ㅠㅠ)

Unsigned 연산 결과인 156이 -100의 2의 보수가 되는 원리가 궁금합니다.

해결된 질문

작성

·

58

1

안녕하세요.

[1. 질문 챕터] : HDL 9장, 5분 50초

[2. 질문 내용] : Unsigned 연산 결과인 156이 -100의 2의 보수가 되는 원리가 궁금합니다.

[3. 시도했던 내용, 그렇게 생각하는 이유] : Unsigned A : 01100100 (십진수 : 100), Unsigned B : 11001000(십진수 : 200)

강의에서, 2의 보수 위키백과 내용 중, '2의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급한다'. (2분 57초)

A - B = A + (-B) = 01100100 + 00111000 = 10011100 (십진수 : 156)

이를 통해, Unsigned 연산 결과 156이 나온 원리를 알았습니다.

 

하지만, A, B를 signed type이라고 가정했을 때의 결과인 -100이 unsigned type으로 정의한 A, B의 연산 결과의 2의 보수값이 되는 원리를 정확히 모르겠습니다.

8bit 중, MSB를 취급하는 방법이 완전히 다른데, 어떻게 2의 보수 관계가 되나요?

답변 2

1

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 🙂

AI 인턴이 답을 잘 달아주었는데요.

Unsigned로 연산한 결과인 156이 signed 연산의 결과인 -100의 2의 보수가 되는 이유 를 질문하신 걸로 이해했습니다.

기본 개념을 먼저 보시면,

1. Signed와 Unsigned의 차이

  • Unsigned: 모든 비트를 숫자로 해석.

    • 예: 8-bit에서 11001000unsigned로 200.

  • Signed: MSB를 부호 비트로 사용.

    • MSB가 0이면 양수, 1이면 음수.

    • 예: 8-bit에서 11001000signed로 -56 (-(256 - 200)).

2. 2의 보수 표현법

  • Signed 연산에서 음수를 표현하는 방식:

    • 음수 -X는 2의 보수로 표현.

    • 2의 보수 = 모든 비트를 뒤집고 +1.

    • 예: -100의 8-bit 표현은 10011100.

=================

여기서 핵심은, 8bit 는

  • signed 일때 range : -128 ~ 127

  • unsigned 일때 range : 0 ~ 255

     

이며, 이것은 Signed 타입 일때의 해석과, unsigned type 일때의 해석이 다르다, 그리고 8 bit 는 순환 한다는 것입니다.

Unsigned 연산 결과 156이 Signed 결과 -100의 2의 보수가 되는 원리

  • 핵심 원리: 이 관계는 이진수의 모듈러 연산 특성 때문입니다.

    • 모든 연산은 고정된 비트수(예: 8-bit)에서 수행되고, 오버플로우는 무시됩니다.

    • 따라서 8-bit에서는 숫자가 0~255로 순환(modulo 256).

    • 이 때문에 Signed와 Unsigned에서 결과 해석이 달라지더라도 이진수는 동일.

MSB의 역할:

  • MSB는 Signed 연산에서 음수 여부를 나타내는 부호 비트로 사용.

  • Unsigned에서는 MSB도 단순 숫자로 간주.

모듈러 연산의 순환:

  • 8-bit에서 가능한 값은 0~255로 순환:

    • 100에서 200을 뺀 결과는 156.

    • Unsigned 156은 Signed로 -100.


[결론]

  • Unsigned 연산 결과 156Signed 연산의 결과 -100과 2의 보수 관계에 있습니다.

  • 이는 고정된 비트수에서의 모듈러 연산 특성과 Signed/Unsigned 해석 방식의 차이 때문입니다.

즐공하세요 🙂

dlgigi324님의 프로필 이미지
dlgigi324
질문자

모듈러 연산의 순환 개념을 알게 해주셔서 감사합니다 !!

 

연산 결과 A - B = -100

고정된 비트수에서의 모듈러 연산 특성에 의해, -100은 Unsigned로 표현되길 156이 된다.

0

안녕하세요, 인프런 AI 인턴입니다.

dlgigi324님께서 Verilog HDL 9장에서 2의 보수 관련하여 질문하신 부분에 대해 설명드리겠습니다.

먼저, 2의 보수는 컴퓨터 시스템에서 연산의 결과를 간단하게 음수로 표현하는 데 사용됩니다. 2의 보수 연산을 수행할 때, 일반적으로 양수 값을 반전(NOT 연산)한 후 1을 더함으로써 음수를 얻을 수 있습니다. 이는 컴퓨터 산술에서 별도의 보정없이 간단하게 덧셈 연산을 수행할 수 있게 해줍니다.

구체적으로, A와 B가 각각 8비트로 표현된 경우, A가 100이고 B가 200이라고 가정해봅시다:

  • A: 01100100 (100)
  • B: 11001000 (-56, 반전 후 1을 더하면 -B의 2의 보수가 됨)

여기서 A - B 연산은 사실상 A + (-B)처럼 구현됩니다. B를 반전(NOT) 시키고 1을 더하여 -B를 구한 후 A와 더하는 것이죠.

  1. B의 NOT: 00110111
  2. B의 2의 보수: 00111000 (+1)

이 2의 보수인 00111000을 A (01100100)에 더하면 10011100이 됩니다. 이 결과는 unsigned에서 156으로 해석되고, signed에서는 -100으로 해석됩니다.

이와 같은 차이는 연산의 결과를 해석하는 방식에서 발생합니다. MSB를 부호 비트로 볼 것인지, 그냥 비트의 일부분으로 볼 것인지에 따라 signed와 unsigned 숫자가 다르게 보이는 것이죠.


이와 관련하여 도움이 될 수 있는 몇 가지 링크를 추천드립니다:

  1. FPGA 연산 관련 질문 - 이 질문에서도 signed, unsigned 연산에 관련된 원리를 설명합니다.

  2. 비트 연산 및 오버플로우 - 2의 보수 연산에 대한 추가적인 이해를 도울 수 있는 내용이 포함되어 있습니다.

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

dlgigi324님의 프로필 이미지
dlgigi324

작성한 질문수

질문하기