연산자
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 예전 버전에는 컴파일 에러가 뜰 수도 있다.
코드에서 대입을 할때,
좌항 = 우항;
을 작성할 경우, 좌항은 위치를 나타내고 우항은 값을 나타낸다.
'개발자과정준비 > C' 카테고리의 다른 글
[C] 제어문 (if, else if, switch, goto) (0) | 2020.10.07 |
---|---|
[C] 연산자 - 2(Cast 연산자, 비트연산자) (0) | 2020.10.06 |
[C] 자료형 - 2 (실수형, 상수) (0) | 2020.09.25 |
[C] 자료형 - 1 (토큰, 문자, 정수) (0) | 2020.09.24 |
[C] 변수, printf, scanf, 자료형 (0) | 2020.09.23 |