본문으로 바로가기
반응형

연산자

 C 언어에서 각 연산자는 우선순위(precedence)와 결합방향(associativity)를 갖는다. 괄호를 이용해서 명백하게 연산자(operator)와 피연산자(operand)를 묶어주지 않으면, 우선순위가 높은 연산자부터 묶이게 된다. 두 연산자의 우선순위가 같을 경우, 피연산자는 연산의 결합방향에 따라 왼쪽 혹은 오른쪽으로 묶이게 된다. 우선순위가 같은 모든 연산자는 항상 같은 결합방향을 갖는다.

 

 

 1차연산자 중 도트연산자(.)는 구조체의 필드를 표시하는 연산자이다. 단항연산자중 -는 음수를 나타내고, 산술연산자중 -는 뺄셈 연산자를 나타낸다. 단항연산자중 *는 포인터 연산자이며, !는 논리 부정 연산자이다.

 

 

sizeof

 각 컴퓨터마다 int, short, long 형에 할당된 바이트의 크기가 다르다. 사용중인 컴퓨터에서 각 자료형의 크기는 sizeof() 연산자를 사용하면 알 수 있다. 

 

 sizeof는 인수의 크기를 바이트단위로 반환된다. 연산자 sizeof()의 피연산자가 자료형이나 수식(num+num)일 때는 괄호로 사용하지만, 변수와 함께 사용할 대는 괄호를 쓸 필요가 없다.

 

#include <stdio.h>

int main(void) 
{
	char a;
	int i;
	double d;
	float f;
	printf("a의 크기 : %d\n", sizeof(a));
	printf("i의 크기 : %d\n", sizeof(i));
	printf("d의 크기 : %d\n", sizeof(d));
	printf("f의 크기 : %d\n", sizeof(f));
	
	return 0;
}

 

 

#include <stdio.h>

int main(void) 
{
	// sizeof 복습. sizeof은 int로 반환된다.
	// C에서 sizeof는 연산자이다.(함수나 메서드가 아니다)

	printf("int형의 크기 : %d\n", sizeof(4));
	printf("float형의 크기 : %d\n", sizeof(float));
	printf("double형의 크기 : %d\n\n", sizeof(double));

	printf("4의 크기 : %d\n", sizeof(4));
	printf("1000의 크기 : %d\n", sizeof(1000));
	printf("3.14의 크기 : %d\n", sizeof(3.14)); // double형
	printf("3.14f의 크기 : %d\n", sizeof(3.14f)); // float형
	
	return 0;
}

 

 

산술연산자

 산술식을 만드는 산술연산자에는 +, -, *, /, % 가 있다. 두 개의 피연산자를 필요로하며, 사용방법과 연산우선 순위는 수학에서와 같다. 연산자 %는 나눗셈의 나머지를 구하는 연산이다. 예를들어 5%3의 값은 2가 된다.

산술연산에서 두 피연산자의 자료형이 다르면 내부적으로 크기가 큰 자료형을 변환하여 연산을 수행한다. 예를 들면 int + float의 연산은 float + float로 변환하여 연산하고 결과값도 float형이 된다.

 

#include <stdio.h>
#pragma warning(disable: 4996) // 전처리언어, 해킹당하든말든 쓰겠다. 라는 뜻

int main(void) 
{
	//int A;
	//// 호환성이 떨어진다는 단점이 있다.
	//scanf_s("%d", &A);  // &는 엔퍼샌드라고 부른다.
	//printf("A = %d\n", A);

	int x, y;
	printf("두개의 정수를 입력하세요 : ");
	scanf("%d %d", &x, &y);

	printf("x+y = %d\n", x + y);
	printf("x-y = %d\n", x - y);
	printf("x*y = %d\n", x * y);
	printf("x/y = %.2f\n", (float)x / y);
	printf("x%y = %d\n", x % y);
    
    return 0;
}

 

 

 

관계연산자

 두 수간에 대소 관계 및 특정 조건을 검사할 때 사용하는 연산자로, 관계가 사실이면 참(True 또는 1)을, 성립되지 않으면 거짓(false 또는 0)을 표시한다. 프로그램에서는 거짓은 0으로 나타내고, 0이외의 다음은 관계 연산자의 종류를 나타낸다. 0이외의 모든 값을 참으로 여긴다.

 

 

#include <stdio.h>
int main(void) 
{
	int a = 10;
	int b = 20;

	printf("[%d > %d] 결과 : %d\n", a, b, a > b);
	printf("[%d < %d] 결과 : %d\n", a, b, a < b);
	printf("[%d >= %d] 결과 : %d\n", a, b, a >= b);
	printf("[%d <= %d] 결과 : %d\n", a, b, a <= b);
	printf("[%d == %d] 결과 : %d\n", a, b, a == b);
	printf("[%d != %d] 결과 : %d\n", a, b, a != b);
   
   return 0;
}    

 

 

논리연산자

 논리 연산자는 프로그램에서 여러 개의 논리식 또는 논리값을 이용하여 논리식을 만들때 사용한다. 피연산자는 항상 논리값(참 또는 거짓)을 가지고 논리식의 결과값도 항상 논리값이 된다.

 

#include <stdio.h>
int main(void) 
{
	int a = 0;
	int b = 1;
	printf("논리 연산 1 && 2 의 결과 : %d \n", 1 && 2);
	printf("논리 연산 0 && 2 의 결과 : %d \n", 0 && 2);
	printf("논리 연산 0 || 2 의 결과 : %d \n", 0 || 2);
	printf("논리 연산 0 || 0 의 결과 : %d \n", 0 || 0);
	printf("논리 연산 !a 의 결과 : %d \n", !a);
	printf("논리 연산 !b 의 결과 : %d \n", !b);
    return 0;
}
    

 

 

#include <stdio.h>
int main(void) 
{
	int a = 0;
	int b = 1;
	int o = 1;
	printf("a < b && o > a 결과 : %d \n", a < b && o > a);
	printf("a > b && o > a 결과 : %d \n", a > b && o > a);
	printf("a < b || o > a 결과 : %d \n", a < b || o > a);
	printf("괄호를 사용하는게 좀 더 깔끔할듯\n");
	printf("(a < b) || (o > a) 결과 : %d \n", (a < b) || (o > a));
    
    return 0;
}

증감연산자

 증감연산자는 피연산자를 하나만 사용하는 산술연산자로 오른쪽에서 왼쪽으로 적용된다. 증감연산자의 피연산자는 변수가 와야된다. 변수의 값을 하나 증가시키거나 감소시키는 ++과 --가 있다. 사용방법은 다음과 같이 변수의 앞이나 뒤에 붙인다.

 

 전치형과 후치형은 변수의 값을 1 증감시키는 것은 같지만 증감시키는 시기가 다르다.

 

 

 전치형의 경우, 먼저 값을 증감시킨 후 값을 이용하고, 후치형은 먼저 변수의 값을 이용한 다음 값을 증감시킨다. 증감식이 단독으로 사용될 때는 전위형과 후위형의 차이가 없으나, 다른 연산자와 함께 쓰일 때는 다른 결과값이 달라진다.

 

 

 

#include <stdio.h>
int main(void) 
{
	int a = 0;
	int b = 0;

	++a;
	b++;
	printf("a = %d, b = %d \n", a, b);

	b = a++;
	printf("a = %d, b = %d \n", a, b);

	printf("a = %d, b = %d \n", a++, b++);
	printf("a = %d, b = %d \n", a, b);

	return 0;
}

 

 

 

 

기타사항.

C언어는 변수선언을 제일 먼저(맨 윗줄)에 미리 해줘야한다. 그렇지 않으면 VS 예전 버전에는 컴파일 에러가 뜰 수도 있다.

 

코드에서 대입을 할때,

좌항 = 우항;

을 작성할 경우, 좌항은 위치를 나타내고 우항은 값을 나타낸다.

반응형