ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C 언어 기초 #4 여러가지 연산자(증감, 복합대입, 형변환, 관계, 논리, 조건, 콤마, 비트단위)
    Programming 기초/C Language 2023. 4. 7. 22:05

    *증감연산자

    ++x -> 먼저 증가시켜 증가된 x의 값을 수식에 사용.

    x++ -> 수식에 현재 x 값 대입 후 나중에 x를 증가시킴.

     

    *복합대입연산자

    *대입 연산시 자동적인 형변환

    double f;

    f = 10;

    10이 double형으로 변환된 후에 변수 f로 대입된다. 이러한 변환을 올림 변환(promotion)이라고 한다.

     

    int i;

    i = 3.141592;

     

    3.141592가 정수형 변수에 대입되면 3으로 변환되어 저장된다. 이러한 변환을 내림 변환(demotion)라고 한다.

    -> 데이터의 손실을 야기함. (int형을 char형에 대입하면 내림 변환 발생. int형은 4바이트고 char형은 1바이트)

     

    *수식 연산시 자동적인 형변환

    char형과 short형은 수식 계산시 cpu 연산 처리의 편의상 int 형으로 자동 승격되어 계산됨. 그래서 그 수식의 결과값은 int 형이 됨.또한 하나의 수식에서 서로 다른 자료형이 사용되면 모든 자료형은 그중에서 가장 높은 등급의 자료형으로 자동적으로 변환된다. -> 데이터 손실을 막기 위해.

    높은 등급 순 : int < unsigned int < long < unsigned long < float < double < long double

     

    *명시적인 형변환

    형변환(type cast)연산자. 캐스트 연산자. (int) 1.23456 // int형으로 변환 괄호를 이용하여 변환한다.

    f= (double)i; // 변수 I의 값이 double형으로 변환된다.

    변수 자체가 변화하는 것이 아니라 단지 변수의 값만 잠시 그 형을 바꾸어서 수식에서 사용하는 것뿐이다.

     

    *관계연산자

    그 결과는 참(ture) 아니면 거짓(false)으로 계산된다.

    연산 의미
    X == Y X와 Y가 같은가?
    X != Y X와 Y가 다른가?
    X > Y X가 Y보다 큰가?
    X < Y X가 Y보다 작은가?
    X >= Y X가 Y보다 크거나 같은가?
    X <= Y X가 Y보다 작거나 같은가?

     

    *논리연산자

    연산 의미
    x && y AND 연산, x와 y가 모두 참이면, 참, 그렇지 않으면 거짓
    x || y OR 연산, x나 y 중에서 하나만 참이면 참, 모두 거짓이면 거짓
    !x NOT 연산, x가 참이면 거짓, x가 거짓이면 참

    -> 단축계산 x&&y에서 x 값이 거짓이면 y값은 계산조차 안함.

    // 윤년 판정 프로그램
    
    #define _CRT_SECURE_NO_WARNINGS		// 비주얼스튜디오 scanf 오류없애기 위해 정의. 가장 먼저 정의해야됨.
    #include<stdio.h>
    		
    
    int main(void)
    {
    	int year, result;
    
    	printf("연도를 입력하시오:");
    	scanf("%d", &year);
    
    
    	// 윤년 조건 1. 연도가 4로 떨어진다. 
        // 윤년 조건 2. 100으로 나누어 떨어지는 연도는 제외한다. 
        // 윤년 조건 3. 400으로 나누어 떨어지는 연도는 윤년이다.
    	result = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
    	
        if (result == 0) printf("\n%d연도는 윤년이 아닙니다.\n", year);
    	else printf("\n %d연도는 윤년이 맞습니다.\n", year);
    	
        // result 값을 출력함
    	printf("result=%d", result);
    	
    	return 0;
    }

    *조건연산자

    유일하게 3개의 피연산자를 가지는 삼항 연산자.

    z = (x > y) ? x : y; -> 참이면 x 거짓이면 y값.

     

     

    *콤마연산자

    x = (2+3, 5-3); -> 2+3이 먼저 계산된 다음 5-3이 계산된다. 수식의 결과값은 5-3의 결과값이 되고 결국 2가 됨.

     

    *비트단위연산자(p.181 – 184)

    ->정수타입 피연산자에만 적용할 수 있다. (char, short, int, long 등)

    A =0100 1100        B = 1100 1010

    연산자 연산자의 의미 설명
    & 비트 AND A&B -> 0100 1000
    | 비트단위 OR A|B -> 1101 1110
    ^ 비트단위 XOR A^B -> 1001 0110
    ~ 비트단위 NOT ~A -> 1010 0011
    << 왼쪽으로 1비트 이동 A<<3 -> 1110 0000
    >> 오른쪽으로 1비트 이동 A>>3 -> 0000 1011

    *예제 : 컬러 픽셀 추출기

    일반적으로 트루 컬러 영상에서 하나의 픽셀이 가지고 있는 색상은 32비트로 표현됨. 32비트는 다시 4개의 8비트로 나누어진다. 최상위 8비트는 픽셀의 투명도를 나타내고 나머지 3개의 8비트는 빛의 3원색인 R, G, B 성분이 얼마나 들어 있는지를 나타낸다.

    AAAA   AAAA   RRRR   RRRR   GGGG   GGGG   BBBB   BBBB

     0000    0000     1111      1111      0000       0000     0000     0000

    //컬러 픽셀 추출기
    
    #include<stdio.h>
    
    int main(void)
    {
    	unsigned int color = 0x00380000;	//픽셀의 색상
    	unsigned int result;
    	/*
    	printf("%x\n", color);			// 출력값 : 380000
    	printf("%#x\n", color);			// 출력 값 : 0x380000 #은 몇 진법인지 표시해주는 기능.
    	*/
    	printf( "픽셀의 색상: %#08x\n", color );
    	result = color & 0x00ff0000;		// 마스크 연산, 중가에 위치한 비트 추출
    	result = result >> 16;			// 비트 이동 연산. 오른쪽 16비트 이동
    	printf("추출된 빨강색: %#08x\n", result);
    	
    	
    	return 0;
    }

    *연산자 우선순위

    콤마 < 대입 < 논리 < 관계 <산술 < 단항 모를 땐 그냥 괄호 쓰자.

     

     

    출처 : 쉽게 풀어쓴 C언어 Express

    댓글

Designed by Tistory.