안녕하세요, 엔지니어 블로그의 글랜입니다.
오늘은 C언어-계산하기를 진행해보겠습니다.
1-1. 산술 연산자 - 코드 작성 및 프로그램 실행 결과

상기 그림과 같이 a = 10, b = 6로 선언한뒤, 빌드 및 프로그램 실행을 진행해줍니다.

그 결과 다음과 같이 나왔네요. 그렇다면 한번 코드 분석을 진행해봅시다.
1-2. 산술 연산자 - 코드 분석
printf("a + b 는 : %d \n", a + b); // 결과는 16
printf("a - b 는 : %d \n", a - b); // 결과는 4
printf("a * b 는 : %d \n", a * b); // 결과는 60
상기의 +, -, * 는 일상생활에서 자주 사용하는 산술 연산자들입니다. 합리적으로 a와 b가 각각 10, 6로 선언되었으므로, 합은 16 / 뺄셈은 4 / 곱셈은 60 이라는 것을 잘 알 수 있죠.
printf("a / b 는 : %d \n", a / b); // 결과는 1
그런데 왜 a 나누기 b는 1일까요? 이유는 정수 데이터이기 때문입니다. 10 나누기 6은 1.66666.... 이지만 정수 부분인 1만 출력되는 것입니다. 따라서 1이 출력되는 것이 맞습니다.
printf("a %% b 는 : %d \n", a % b); // 결과는 4
마지막으로 % 라는 연산자입니다. +, -, *, / 연산자는 모두 정수, 실수형 데이터에 대해서 연산이 가능한데, %는 오직 정수형 데이터에서만 연산이 가능합니다. 그 이유는 %가 나눈 나머지를 표시하기 때문입니다. 따라서 a(10)와 b(6)를 나누면 4가 남게 됩니다.
추가로, %%로 표시한 이유는 %가 %d, %f와 같이 사용되기 때문에 %만을 출력하기 위함입니다.
2-1. 산술 변환 - 코드 작성 및 프로그램 실행 결과

상기 그림과 같이 코드를 작성해준뒤, 빌드 및 프로그램 실행을 해줍시다.

a 나누기 b 결과는 이상하게 나오고 c 나누기 d, d 나누기 c 결과는 정상적으로 나왔네요.
왜 그럴까요?
2-2. 산술 변환 - 코드 분석
int a, b;
printf("a / b 는 : %f \n", a / b); // 결과는 0
[정수형 변수] [연산] [정수형 변수] 의 결과는 항상 [정수]로 유지됩니다. 따라서 실수형 데이터를 출력하는 %f를 정수형 값 출력에 사용하게 되면 위와 같이 이상한 값(0.00000)이 나타나게 되는겁니다.
int c;
double d;
printf("c / d 는 : %f \n", c / d); // 결과 1.66667
printf("d / c 는 : %f \n", d / c); // 결과 0.60000
c는 정수형 변수, d는 실수형 변수입니다. 그런데 이들에 대해 연산을 수행한 결과를 실수형으로 출력했는데 정상적으로 동작했네요. 그 이유는 컴파일러가 산술 변환을 수행했기 때문입니다. 자료형이 다른 두 변수를 연산할 경우, 숫자의 범위가 큰 자료형으로 변환을 하게 됩니다. 따라서 숫자의 범위가 큰 d에 맞게 실수형 변수로 c가 산술 변환이 된거죠.
오히려 %d를 사용했다면 오류가 생기게 되었겠네요.
3-1. 대입연산자 - 코드 작성 및 프로그램 실행 결과

상기 그림과 같이 코드를 작성해준뒤, 빌드 및 프로그램 실행을 진행합니다.

그 결과, 모두 4라는 값이 나왔네요. 코드를 한번 살펴봅시다.
3-2. 대입연산자 - 코드 분석
a = a + 1;
아주 기초적으로 1을 더하는 방법입니다. a는 3이였으니, +1을 한 결과 4가 정상적으로 출력되었죠.
b += 1;
약간은 생소한 += 연산입니다. 이러한 연산을 복합 대입연산 이라고 하며, b = b + 1 라는 의미와 같습니다. 이렇게 쓰는 이유는 b = b + 1 전부를 쓰기 귀찮아서 입니다.
b += x; // b = b + x; 와 같은 의미
b -= x; // b = b - x; 와 같은 의미
b *= x; // b = b * x; 와 같은 의미
b /= x; // b = b / x; 와 같은 의미
이러한 복합 대입연산은 상기와 같이 다른 연산자에도 적용될 수 있습니다.
++c ; // 증감 연산자 - 전위형(prefix)
d++ ; // 증감 연산자 - 후위형(postfix)
위와 같은 연산자(++)를 증감 연산자라고 합니다. 전위형의 경우 먼저 1을 더해준 후 결과를 돌려주고, 후위형의 경우 결과를 돌려준 후 1를 더해줍니다.
증감 연산자에 대해 더 정확하게 알아보기 위해서 하기의 예시를 살펴보겠습니다.
4-1. 증감 연산자 - 코드 작성 및 프로그램 실행 결과

상기와 같이 코드를 작성해주고요.

결과가 다르게 나왔네요. 한번 분석해봅시다.
4-2. 증감 연산자 - 코드 분석
int a = 3;
printf("++a : %d \n", ++a); // 결과는 4
전위형인 ++a는 먼저 1을 더한 후 결과를 반환합니다. 따라서 결과는 4가 나왔습니다.
a = 3;
printf("a++ : %d \n", a++); // 결과는 3
printf("a : %d \n", a); // 결과는 4
반면 후위형인 a++는 먼저 a의 값인 3을 반환하여 출력한뒤에 a에 1이 더해집니다. 따라서 그 다음에 나오는 a값이 4가 나오게 되는것이죠.
추가로, 위 4개의 연산 중에서 가장 빨리 연산되는 것은 a++과 같은 증감 연산자입니다.
'C언어' 카테고리의 다른 글
[백준][10718] We love kriii 문제풀이 / 정답 / 코드 (0) | 2022.09.15 |
---|---|
[백준][2557] Hello World 문제풀이 / 정답 / 코드 (0) | 2022.09.15 |
[C언어] 실수형 변수 선언, printf의 또다른 형식, 변수 작명하기 (0) | 2022.02.02 |
[C언어] 변수(Variable) 선언하기 (정수, 8진수, 10진수, 16진수, printf) (0) | 2022.02.01 |
[C언어] Hello World! (#include, int, printf, return에 대해), 새 프로젝트 만들기 (Visual Studio 2022) (0) | 2022.02.01 |