종제로
종제로 Devlog
종제로
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • C, C++ (22)
      • C, C++ (10)
      • Modern C++ (4)
      • 전문가를 위한 C++ (책) (8)
    • DirectX 자체엔진 개발 (8)
    • 자료구조 알고리즘 (10)
      • 공부 (9)
      • 문제풀이 (1)
    • 자기 계발 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DirectX11
  • c++ 17
  • 전문가를 위한 C++
  • c++ 11
  • 모두의C언어
  • C++
  • 알고리즘
  • C
  • directX
  • 자료구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
종제로

종제로 Devlog

[C] C언어에서 음수를 표현하는 방법
C, C++/C, C++

[C] C언어에서 음수를 표현하는 방법

2022. 1. 7. 08:51

1. -10은 메모리 비트에 어떻게 저장될까?

먼저, 10진수 10을 저장하려면 2진수 1010으로 변경한 다음 비트에 저장된다고 알고 있다. 그런데 음수는 어떻게 표현해야 할까?

 

2. 양수와 음수를 구분하기 위한 부호와 절대치 법칙

다른 말로 MSB(Most Significant Bit) 방법이라고도 하는데, 이는 최상위 비트를 사용하여 숫자가 양수인지 음수인지를 구분하는 방법이다.

1 0 0 0 1 0 1 0
최상위비트 MSB가 1이므로 음수
0 0 0 0 1 0 1 0
최상위비트 MSB가 0이므로 양수

 

비트 연산자 ~는 '1의 보수'이다. 1의 보수는 2진수로 된 숫자의 비트를 모두 반전시키는 것이다. 예를 들어 ~(1010)은 (0101)이 된다. 다시 말해 (1010)의 1의 보수 값은 (0101)이라고 할 수 있다.

'2의 보수'도 있다. 2의 보수는 1의 보수의 과정을 거친 값에 1을 더한 값이다. 예를 들어 (1010)의 2의 보수는 1의 보수인 (0101)에 1을 더한 값인 (0110)이 된다.

특정 숫자를 1의 보수와 2의 보수 과정을 차례대로 거치면 음수로 표현할 수 있다. 그 예로, 5를 이용하여 1의 보수, 2의 보수 과정을 거쳐 -5를 표현하면 다음과 같다.

양수 5
-> 2진수
0 0 0 0 0 1 0 1
-> 1의 보수
1 1 1 1 1 0 1 0
-> 2의 보수
1 1 1 1 1 0 1 1 -> 음수 (-5)

 

이제 우리는 수식 5 - 5가 어떻게 비트로 저장되고 계산되는지 이해할 수 있다.

5 - 5를 계산하는 과정

 

지금까지 특정한 숫자가 1의 보수와 2의 보수를 거쳐 음수로 표현되고 뺄셈이 수행되는 과정을 알아보았다.

특정 숫자 a를 음수로 표현하려면 1의 보수를 취한 값에 1을 더하면 되므로 (~a) + 1을 하면 된다. 즉, -a == (-a) + 1이라고 할 수 있다. 그러므로 (~a) == -a -1이라고도 표현할 수 있다. 예를 들어, (~10)은 (~10) == -10 -1 이므로 -11이다.

 

 

참고

  • 모두의 C언어 책
저작자표시 비영리 변경금지 (새창열림)

'C, C++ > C, C++' 카테고리의 다른 글

[C++] C++ 언어의 특징  (0) 2022.03.02
[C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역)  (0) 2022.01.30
컴파일(Compile) 과정  (0) 2022.01.05
[C] 모두의 C언어 복습&정리 (2)  (0) 2022.01.03
[C] 모두의 C언어 복습&정리 (1)  (0) 2021.12.28
    'C, C++/C, C++' 카테고리의 다른 글
    • [C++] C++ 언어의 특징
    • [C] 4가지의 메모리 저장소 (스택, 힙, 데이터, 코드 영역)
    • 컴파일(Compile) 과정
    • [C] 모두의 C언어 복습&정리 (2)
    종제로
    종제로

    티스토리툴바