JUST GO

[C] 연산자(2) 본문

C/학습내용

[C] 연산자(2)

root_go 2022. 10. 5. 09:47

ex - 증감 연산자의 사용 예

#include <stdio.h>

int main(void) 
{
	int index1 = 0, index2 = 0;
	int current1, current2;
	float x1 = 0.5F, x2 = 0.5F;
	float y1, y2;

	current1 = index1++; // 증가 전의 index1 (current1에는 0 - 후 반영)
	printf("index1 = %d, current1 = %d\n", index1, current1);

	current2 = ++index2; // 증가 후의 index2 (current2에는 1 - 선 반영)
	printf("index2 = %d, current2 = %d\n", index2, current2);

	y1 = x1++; // 증가 전의 x1(실수형에도 증감 연산자를 사용할 수 있다)
	printf("x1 = %.2f, y1 = %.2f\n", x1, y1);

	y2 = ++x2; // 증가 후의 x2
	printf("x2 = %.2f, y2 = %.2f\n", x2, y2);

	return 0;
}

 C프로그래밍 vs C++프로그래밍

- C프로그래밍, test.c

#include<iostream> // 사용 불가

#include<stdio.h> // 데이터선언부, 헤더파일 선언

using namespace std;

int main(void){ // 주함수 선언, 진입점 함수

printf("Hello! \n");

cout<<"good"<<endl; // .c 파일에서는 사용 불가

return 0; // 프로그램 종료 의미

}

 

- C++프로그래밍, test.cpp

#include<iostream> // 데이터선언부, 헤더파일 선언

using namespace std;

int main(void){ // 주함수 선언, 진입점 함수

printf("Hello! \n");

cout<<"good"<<endl; // .cpp 파일에서는 사용 가능하다

return 0; // 프로그램 종료 의미

}

 

대입 연산자

- 연산자의 좌변에 있는 변수(l-value)에 우변의 값(r-value)을 저장

- 대입 연산자의 좌변에는 변수만 올 수 있다.

 

대입 연산식의 값

- 대입 연산자의 좌변에 있는 변수의 값이 대입 연산식의 값

 

 


ex - 대입 연산식의 값

#include <stdio.h>

int main(void) 
{
	int a = 0;
	double b = 0;
	int c = 0;

	a = 123; // a에 123 저장
	printf("a = %d\n", a);
	printf("a = %d\n", a = 456); // a에 456 저장 후 a의 값이 수식의 값
	printf("b = %f\n", b = a + 0.5); // b에 a + 0.5 저장 후 b의 값이 수식의 값
	printf("c = %d\n", c = printf("ABC\n")); // printf 함수의 리턴 값을 c에 저장하고 c의 값이 수식의 값

	return 0;
}
 
 

복합 대입 연산자

- 좌변의 변수를 피연산자로 이용해서 연산을 수행하고 연산의 결과를 다시 좌변의 변수에 대입한다.

 

 

복합 대입 연산자의 활용

 

ex - 복합 대입 연산자의 활용

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) 
{
	int items = 0; // 전체 항목 수
	int pages = 0;
	int items_per_page = 0; // 한 페이지 당 항목 수 

	printf("항목수? ");
	scanf("%d", &items);

	printf("한 페이지 당 항목수? ");
	scanf("%d", &items_per_page);

	pages = items / items_per_page; // 페이지 수
	items %= items_per_page; // 남은 항목 수
	printf("%d 페이지와 %d 항목\n", pages, items); // 나머지 연산의 결과를 다시 items에 저장하므로 left 변수가 필요 없다.

	return 0;
}

 

복합 대입 연산자의 우선순위

 

관계 연산자

- 두 수의 값을 비교하기 위한 연산자

- 관계 연산식의 값은 항상 참 또는 거짓

- C에서 참(true)은 1이고, 거짓(false)은 0이다.

 

관계 연산자 사용 시 주의 사항

- 두 값이 같은지 비교할 때는 =가 아니라 ==를 이용해야 한다.

- 실수를 비교할 때는 오차를 고려해야 한다.

- 10 < x < 20과 같은 수식을 사용해서는 안된다.

 

참, 거짓의 판단

- C에서는 수식이 참인지 거짓인지 판단할 때, 0이 아닌 값은 참으로 간주한다.

 

논리 연산자

- 참과 거짓을 이용한 논리 연산 기능

- 연산의 결과가 항상 참(1) 또는 거짓(0)

- 피연산자가 0이 아니면 참으로 간주한다.

 

ex - 논리 연산자의 사용 예

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) 
{
	int month;

	printf("몇 월? ");
	scanf("%d", &month);

	if (month >= 6 && month <= 8) // 논리 AND
		printf("성수기 요금 적용\n");

	if (month < 6 || month > 8) // 논리 OR
		printf("일반 요금 적용\n");

	//if (!(month) ?= 6 && month <= 8)) // 논리 NOT
	//	printf("일반 요금 적용\n");

	return 0;
}
 

논리 연산자 사용시 주의 사항

- 관계 연산자과 함께 사용하면 관계 연산자부터 수행된다.

- && 연산자가 || 연산자보다 우선순위가 높다.

 

논리 연산자의 단축 계산

- 'expr1 && expr2'에서 expr1이 거짓이면 expr2는 평가되지 않는다.

즉, expr2는 expr1이 참일 때만 평가된다.

- 'expr1 || expr2'에서 expr1이 참이면 expr2는 평가되지 않는다.

즉, expr2는 expr1이 거짓일 때만 평가된다.


비트 연산자

- 피연산자의 각 비트 단위로 수행되는 연산자

 

비트 논리 연산자

- 논리 연산자가 피연산자의 전체 값으로 연산을 수행하는 반면에, 비트 논리 연산자는 각 비트에 대하여 연산을 수행한다.

- &, |, ^ 연산자는 피연산자의 데이터형이 일치하지 않으면 형 변환을 수행하여 같은 형으로 만든 후, 피연산자의 각 비트에 대하여 비트 논리 연산을 수행한다.

 

비트 AND(논리곱) 연산

- 비트마스크(bitmask) 또는 마스크(mask)

비트 논리 연산에서 이용되어 특정 비트 값을 조작하기 위한 목적의 데이터

x와 y를 비트 AND 연산하면 x의 값 중에 y의 비트가 1인 부분의 값만 유지되고, 나머지 비트는 모두 0이 된다.

 

비트 OR 연산

- x와 y를 비트 OR 연산하면 x의 값 중에 y의 비트가 0인 부분의 값만 유지되고, 나머지 비트는 모두 1이 된다.

 

비트 XOR 연산

- x와 y를 비트 XOR 연산하면 x의 값 중에 y의 비트가 1인 부분은 토글되고, y의 비트가 0인 부분의 값은 유지된다.

 

 

'C > 학습내용' 카테고리의 다른 글

[C] 제어문(switch문)  (0) 2022.10.05
[C] 제어문(if문)  (0) 2022.10.05
[C] 연산자(3)  (1) 2022.10.05
[C] 연산자(1)  (0) 2022.10.05
[C] C언어와 프로그래밍 개요  (0) 2022.10.05