-
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
'Programming 기초 > C Language' 카테고리의 다른 글
C 언어 기초#6 함수와 변수, 가변매개변수함수, 순환함수 (0) 2023.04.11 C 언어 기초#5 제어문 - if, switch, goto, while, for, continue (0) 2023.04.08 C 언어 기초 #3 상수, 자료형, 진법, 부동소수점, escape sequence, 오버/언더 플로우 (0) 2022.11.08 C 언어 기초 #2 printf(), scanf() (0) 2022.11.08 C 언어 기초#1 프로그래밍 기초 개념 (0) 2022.11.08