본문 바로가기

공부/c언어

int형 <2의 보수> 계산법

반응형

2의 보수 = 맨 앞의 비트를 바꾸는 역할을 함

(0 -> 1, 1 -> 0) 

부호를 바꾸는 역할


* 보수 : 양수를 음수로 바꾸는 것

 

* 보수를 구하는 방법 : 1은 0으로, 0은 1로 바꾼 후, 1을 더한다

  - 음의 10진수 정수를 2진수로 

    1) 해당 정수을 양수로 바꾸어 2진수로 표현한 후,

    2) 구한 2진수에서 1은 0으로, 0은 1로 바꾼 다음,

    3) 1을 더한다.

  - 2진수를 음의 10진수 정수로

    1) 2진수에서 1은 0으로, 0은 1로 바꾼 다음,

    2) 바꾼 2진수에서 1을 더하고

    3) 더한 2진수를 10진수로 변환하여, 음을 붙인다.

 

1. 음수를 2진수로 변환

(음수 10진수) -> (양수 10진수) -> (2진수) -> (1/0 변환) -> (1 더하기) -> (2진수)

 

2. <음수>2의 보수화된 2진수(맨처음 비트가 1인 이진수)를 10진수로 변환 

(음수화된 10진수) <- (음수화)  <- (1 더하기) <- (10진수로 변환) <- (1/0 변환) <- (2진수)

 

3. <양수>맨처음 비트가 0인 양의 이진수(2의 보수 계산을 역으로 할 필요없음)를 10진수로 변환

(10진수) <- (2진수)

 

4. 양수를 2진수로 변환

(양수 10진수) -> (2진수)

 

1. 음수를 2진수로 변환

ex) -3을 2진수로 표현

 -> 00000011 (3을 2진수로 표현한다)

 -> 11111100 (1은 0으로, 0은 1로 바꾼다)

 -> 11111101 (1을 더한다)

 

ex) -2를 2진수로 표현

 -> 00000010 (2를 2진수로 표현한다)

 -> 11111101 (1은 0으로, 0은 1로 바꾼다)

 -> 11111110 (1을 더한다)

 

2. <음수>2의 보수화된 2진수(맨처음 비트가 1인 이진수)를 10진수로 변환 

ex) 11111110

 -> 00000001 (1은 0으로, 0은 1로 바꾼다)

 -> 1 + 1 = 2 (1을 더한다)

 -> -2 (여기에 음수를 취해 주면 10진수로 바뀐다)

 

ex) 11111101

 -> 00000010

 -> -(2 + 1)

 -> -3


ex) 11111110

 -> 00000001

 -> -(1 + 1)

 -> -2


반응형