C언어/참고서: C언어 콘서트

C언어 13차시 대입 연산자, 관계 연산자, 비트 연산자, 비트 이동 연산자

Olivia-BlackCherry 2023. 3. 21. 22:48

목차

    1. 대입 연산자 assignment operator

    - 왼쪽 변수에 값을 저장한다.  

    (수학에서는 =는 등호이다.)

    - 연속해서 사용이 가능하다. 

    x = y = z = 0; 

    z=0 이다. 

    y=0 이다.

    x= 0 이다. 

    오른쪽에서부터 해석해나간다. 

    -복합 대입연산자 

    +=, -=. *=, /=, %= 
    x+=y 는 x= x+y 이다.

    출처: C언어 콘서트(이하 생략)

     

     

    2. 관계 연산자 relational operator

    - 두 개의 피연산자를 비교한다. 

    - 값은 불린형태로 true=1, false=0 두 가지로 나온다. 

    ==, !=, >, < , >=, <= 
    x != y 는 x는 y와 다른가에 대한 값으로 같다면 1, 다르다면 0이다.

     

     

    3. 비트 연산자 bit operator 

    비트는 컴퓨터에서 정보를 저장하는 가장 작은 단위로, 

    모든 데이터는 결국 비트로 표현된다.

    비트 8개는 1바이트가 된다. 

     

    비트 연산자는 비트별로 연산을 하는 연산자인데,

    정수 타입(char, short, int, long-unsigned, singed 모두 가능)의 피연산자에만 적용할 수 있다. 

    부동소수점에는 적용 불가이다.

     

    단어가 생소하지만, 과거에 배웠던 수학 논리를 생각해보면 쉽게 이해할 수 있다. 

    아래의 조건을 만족해야 1이 된다. 

    & AND는 모두 만족해야 한다. 

    | OR은 하나라도 만족하면 된다. 

    ~ NOT은 반대로 만들어준다. 

    ^ XOR은 비트 값이 서로 달라야 한다. 

     

    비트 AND 연산

    x 0 0 0 1 0 1 0 0
    y 0 0 0 0 1 1 0 0
    x AND y 0 0 0 0 0 1 0 0

    비트 OR 연산

    x 0 0 0 1 0 1 0 0
    y 0 0 0 0 1 1 0 0
    x OR y 0 0 0 1 1 1 0 0

    비트 NOT 연산

    x 0 0 0 1 0 1 0 0
    NOT x 1 1 1 0 1 0 1 1

    비트 XOR 연산

    x 0 0 0 1 0 1 0 0
    y 0 0 0 0 1 1 0 0
    x XOR y 0 0 0 1 1 0 0 0

     

     

    4. 연습문제

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int x = 9;
    	int y = 10;
    
    	printf("%08X & %08X = %08X\n", x, y, x & y);
    	printf("%08X | %08X = %08X\n", x, y, x | y);
    	printf("%08X ^ %08X = %08X\n", x, y, x ^ y);
    	printf("~ %08X = %08X\n", x,~x);
    
    	return 0;
    }

    ※ 주의점

    16진법을 쓸 때 0x로 시작한다고 알고 있다. 

    16진법으로 지정형식자를 나타낼 때, %0X라고 표기하는데

    자리수를 나타내고 싶을 때 사이에 숫자를 넣어준다. 

    예를 들어 8자리의 16진수로 표시하고자 한다면, %08X이라고 쓴다. 

     

     

    5. 비트 이동 연산자 bit shift operator

    <<, >>
    x<<y     x의 비트들을 y칸 만큼 왼쪽으로 이동
    x>>y     x의 비트들을 y칸 만큼 오른쪽으로 이동

    지정된 숫자만큼 전체 비트를 이동시킨다. 

     

    - 문제: 15<<2    15를 2칸 만큼 왼쪽으로 이동

     

    - 문제: 15>> 2    15를 2칸 만큼 오른쪽으로 이동(부호비트로 빈 곳 채우기)

     

     

    6. 연습 문제

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int x = 9;   //1001(2진수)
    
    	printf("%d << 1 = %d\n", x, x << 1);   //10010
    	printf("%d >> 1= %d\n", x, x>>1);   //00100
    
    	return 0;
    }

    변수 값을 두배로 하려면, 왼쪽으로 비트를 이동시키고

    변수 값을 1/2배로 하려면, 오른쪽으로 비트를 이동시킨다.