"/>

프로그래밍 기초-C언어 배우기(보수와 삼항 연산자)

-처음부터 배우기-

보수

보수는 보충을 해주는 수를 의미한다.
예를 들면 1에 대한 10의 보수는 9, 4에 대한 15의 보수는 11의 개념이다. 2에 대한 1의 보수는 1이다.

C언어등 프로그래밍 언어에서는 2진수를 기반으로 하여 크게 1의 보수와 2의 보수가 사용된다.

1의 보수의 경우, 2진수의 각 자릿수가 1이 되기 위해 더해주어야 되는 수로 0과 1로 이루어진 2진수의 경우 1의 보수를 통해 반전된다.(0→1, 1→0).
2의 보수의 경우, 어떠한 수 보다 큰 2의 제곱수에서 뺀 뒤 얻은 수로 1의 보수를 취한 2진수에 추가로 1을 더한다.

1의 보수+1 = 2의 보수, 가 된다.

그럼 컴퓨터에서는 보수를 어떻게 쓰는 것일까?

컴퓨터에서는 음수의 표현을 2의 보수로 사용한다.

컴퓨터는 음의 정수를 2진수로 변환하고 32비트로 만들어 저장한다. 예를 들어 9의 2진수 형태인 1001을 32비트로 만들어
0000 0000 0000 0000 0000 0000 0000 1001식으로 저장된다.

그럼 1의 보수로 표현한 9의 보수는 어떠한 형태일까?
1111 1111 1111 1111 1111 1111 1111 0110  (1 보수)이 되며 이 값은 -9가 된다.

하지만 컴퓨터는 2의 보수의 형태로 저장 하므로 1의 보수에서 1더한 값인
1111 1111 1111 1111 1111 1111 1111 0111  (2 보수)가 -9로 컴퓨터에 저장된다.

그럼 보수를 이용하는 비트연산자인 ‘~‘에 대해 알아보자

아래의 코드를 직접 작성하고 실행시켜보자

1  #include <stdio.h>
2  int main()
3  {
4  int a;
5  scanf(“%d”, &a);
6  printf(“%d”, ~a);
7  }

실행결과

만약 9를 넣었을때 결과값이 -10이 나온다

  • 6행의 ~는 각 자릿수의 비트값을 반대로 바꾼다.
  • 즉 0000 0000 0000 0000 0000 0000 0000 1001가
    1111 1111 1111 1111 1111 1111 1111 0110형태로 바뀌며 이것을 2의 보수로 컴퓨터가 읽는다.

1111 1111 1111 1111 1111 1111 1111 0110가 2의 보수라고 할때 1111 1111 1111 1111 1111 1111 1111 0110를 2의 보수로 가지고 있는 수는 -10이므로 결과값이 -10이 출력된다.

10: 0000 0000 0000 0000 0000 0000 0000 1010
-10:1111 1111 1111 1111 1111 1111 1111 0101(1의 보수)
-10:1111 1111 1111 1111 1111 1111 1111 0110(2의 보수)

비트  연산자(‘~’, NOT)의 관계식
~n = -n – 1
-n = ~n + 1
과 같은 관계로 표현된다.

삼항 연산자

3개의 요소로 이루어지는 3항(ternary) 연산자는
“조건식 ? 참일때값:거짓일때값”의 구조를 가지는 연산자 이다.
마찬가지로 ? 연산의 결과는 값으로 계산된다.

아래의 코드를 직접 작성하고 실행해 보자.

1  #include<stdio.h>
2  int main()
3  {
4  printf(“%d”, 4>3 ? 4:3);
5  printf(“%d”, 4<3 ? 4:3);
6  }
실행결과

위 프로그램을 실행하면 각각 4와 3을 출력한다.

  • 4행에서 4>3은 참이므로 왼쪽에 있는 값인 4를 출력한다.
  • 5행에서 4<3은 거짓이므로 오른쪽에 있는 값인 3을 출력한다.

 

 

-이어서 공부하기-

댓글 남기기

Scroll Up