Search

연산자, 형변환

연산자의 종류와 사용

연산자, 연산식

일상생활에서 사용하는 +, -, x, ÷ 같은 연산자를 이용해 만든 수식 = 연산식
연산식은 피연산자와 연산자로 이뤄짐
(예) 5+3에서 5와 3은 피연산자, +는 연산자. 연산식은 반드시 '하나'의 결과값 가짐(연산값)
단항연산자 : 부호 표시할 때 사용되는 +, -
이항 연산자 : 산술연산 하는 +, -, *. /
삼항 연산자 : 조건 연산자 ?: ( a > b ) ? a:b)

산술연산자

1.
+, -, *, / : 피연산자=정수형이나 실수형
2.
% : 피연산자=정수형, 나머지 연산( 7 % 3 ⇒ 1 )
3.
+, - (부호연산자) : 단항연산자( a = 10일 때 -a = -10)

대입연산자 =

값을 초기화/치환/연산 하기 위해 쓰임
오른쪽의 값이나 식 등이 왼쪽의 변수에 저장됨
var = exp (exp의 결과값이 var에 저장)

증감연산자

축약대입연산자
a = a+b ⇒ a += b
a = a * b ⇒ a *= b
등등
#include <stdio.h> int main() { int x = 12, y = 5; printf("12 + 5 = %d\n", x + y); printf("12 - 5 = %d\n", x - y); printf("12 * 5 = %d\n", x * y); printf("12 / 5 = %d\n", x / y); printf("12 % 5 = %d\n", x % y); return 0; }
C
복사
#include <stdio.h> int main() { int x = 12, y = 5; int result; result = x + y; // 대입연산자 printf("result = %d\n", result); printf("++x = %d\n", ++x); //전위연산자 : 값을 증가한 후 대입. --이면 감소한 후 대입 printf("x = %d\n", x); printf("y++ = % d\n", y++); //후위연산자 : 대입한 후 값 증가. --이면 대입한 후 감소 printf("y=%d\n", y); return 0; }
C
복사

관계연산자

피연산자끼리의 크기를 비교한다.
연산값은 0이나 1( 거짓이면 0이고 참이면 1이다)

논리연산자

피연산자의 참이나 거짓에 따라 결과값이 달라진다
1.
and : 하나라도 거짓이면 거짓. 모두 참이어야 참
2.
or : 하나라도 참이면 참
3.
not : 피연산자가 0이면 1 , 1이면 0

조건연산자 ? :

조건에 따라 피연산자가 결과값이 되는 연산자
유일한 삼항연산자
(예) x ? a:b (x값이 참이면 a를 return, 거짓이면 b를 return)

비트연산자

컴퓨터 정보 최소단위 = 비트
비트 중심 연산
& : 피연산자 둘다 1이면 연산값 1
| : 피연산자 둘 중 하나 이상 1이면 연산값 1
^ : 비트 서로 다르면 연산값 1
~ : 비트 0이면 1, 1이면 0
#include <stdio.h> int main() { //참은 1 거짓은 0 printf("(3>5)결과값 : %d\n", (3 > 5)); printf("(3<=5.0)결과값 : %d\n", (3 <= 5.0)); printf("('Z'<'a')결과값 : %d\n", ('Z' < 'a')); //아스키코드값비교 printf("(4 != 4.0)결과값 : %d\n", (4 != 4.0)); return 0; }
C
복사
#include <stdio.h> int main() { // 더 큰 수 출력하기 int a, b; printf("비교할 두 수 입력:"); scanf("%d %d", &a, &b); printf("최댓값: %d\n", (a > b) ? a : b); // a가 더 크면 a를, b가 a보다 크거나 같으면 b를 출력 return 0; }
C
복사
시프트연산자 예시
#include <stdio.h> int main() { //시프트 연산자 int a = 0xAF; //10101111 // 1010 = A, 1111 = F printf("%x \n", a << 2); // a << 2 = 10111100 비는 자리는 0으로 채워짐 printf("%x \n", a >> 3); // a >> 3 = 00010101 비는 자리는 0으로 채워짐 return 0; }
C
복사
교안 16p
Q. 0x를 붙이면 컴파일러가 자동으로 16진수로 인식을 해주나요?
Q. shift연산을 하는 목적은 보통 무엇인가요?

형변환 연산자

C언어 자료형들은 각각 다양한 표현 방법 및 크기 가짐
연산에 따라 형변환이 필요하기도 함
크기자료형의 범주 변화에 따라 구분
올림변환 : 작은 자료형 → 큰자료형 (예) int → double
내림변환 : 큰 자료형 → 작은 자료형 (예) double → int
자료형 변환의 주체가 무엇인지에 따라 구분
명시적 형변환 : 프로그래머가 소스에 직접 형변환 연산자 사용
(예) double result = (double) 5/2 → 5.0 / 2 (= 2.5)
묵시적 형변환 : 컴파일러가 자동으로 형변환
형변환 예시
#include <stdio.h> int main() { int a = 3.2; // a는 int형이므로 3대입 double b = 3; // b는 double형이므로 3.000000이 대입 printf("%d5 %10f\n", a, b); printf("%10f", 3 + 4.5);//자동으로 3.0 + 4.5가 된다 return 0; }
C
복사
#include <stdio.h> int main() { int a = 3, b = 5; double x = 3.5, y = 2.7; printf("%d ", a + b > y && x < y); //연산순서는 a+b, a+b>y, x<y, a+b>y && x<y printf("%d ", a++ - --b * 2); // 연산순서는 a ++, --b, --b*2, a++ - --b * 2 : 3 - (4x2) = -5 printf("%f ", a > b ? x + 1 : y * 2); // 연산순서 a>b, x+1, y*x, a > b ? x + 1 : y * 2 // 위에서 ++와 --연산자 인해 a와 b의 값은 바뀐상태(a=4,b=4) 따라서 y*x가 출력됨(5.400000) return 0; }
C
복사
#include <stdio.h> int main() { int a = 3, b = 5; double x = 3.5, y = 2.7; printf("%d ", a++ - --b * 2); // a는 후치이므로 3그대로, --b는 전치이므로 4대입 이후 사칙연산 법칙에 따라 계산하면 // 3 + (4*2) = 3-8 = -5 a = 3, b = 5; // 다시 초기화 printf("%d ", (a++ - --b) * 2); // (3 - 4) *2 = -2 return 0; }
C
복사