[C] 연산을 컴퓨터로 하는 법(최종).jpg

장세민·2022년 7월 2일
0

📝 TIL

목록 보기
6/40

변수의 값을 1 증가하기

예를들어 boy 변수에 저장된 남학생 수를 1 증가하려면?

boy = 14;
-> boy = 15;
이런 식으로 직접 대입해서 해줄 수도 있다.
근데 이런 방법은 계산량이 많아질 때는 상당히 번거로울 것 같다..

이렇게 boy = boy + 1 로 표현해주면
1씩 증가할 때마다 간단하게 표현할 수 있다.
오...

그럼 남학생 수가 n명 증가하는 경우는
당연하게도

boy = boy + n;
형식이 되겠네.

그니까 변수의 값을 n만큼 증가-감소 또는 n배 또는 1/n으로 수정할 때는, 좌우로 같은 변수명이 두 번 쓰인다.

근데 프로그래머 입장에서 짜야할 코드도 많은데 같은 변수명을 두 번이나 쓰는 건 매우 귀찮은 일이다.

그래서 이 문제를 해결해주는 것이 복합 대입 연산자이다.

복합 대입 연산자

복합 대입 연산자를 사용하면 같은 변수를 두 번 사용할 필요가 없다.

기본 연산자를 사용하여 이렇게 표현하면 같은 변수를 두 번 사용 할 필요가 없다.

그러나, 주의할 점은
변수 = 변수 + 식 -> 변수 += 식 의 원리 이므로
예를 들어,
a *= 2 + b와 같은 식을 표현 할 때는
a = a * (2+b)와 같이 괄호를 사용해서 식을 표현해 줘야 한다.

근데, 프로그래머들은 이것도 귀찮아서 변수의 증값을 1 증가시킬 때,
변수 ++ 로 표현한다.

반대로 변수의 값을 1 감소할 때는,
변수 --를 사용한다.

그럼 한 번 맨 처음 boy 변수에 저장된 남학생 수를 증가시켜보자.

#include<stdio.h>
 
int main()
{
	int boy;
 
	boy = 3;
	boy = boy + 1;
	boy += 1;
	boy++;
	boy--;
 
	printf("남학생: %d명", boy);
 
 
	return 0;
}
 

문제없이 실행된다 ㅋ

증감 연산자

C 구문에서 ++와 -는 위치가 중요하다.

++변수는 변수의 값을 1 증가한 후 변수의 값을 식에서 사용하는 것이고,

변수++는 현재 변수의 값 그대로 식에서 사용한 후 변수의 값을 1 증가하는 것이다.

예를 들어,

  • ++이 변수 앞으로 갔을 때,
     
    #include<stdio.h>
     
    int main()
    {
    	int a, total;
     
    	a = 2;
    	total = ++a * 10;
     
    	printf("a : %d, total : %d \n", a, total);
     
     
     
    	return 0;
    }
     

a는 1 증가해서 3이지만, total은 a를 1 증가시킨 후 식에서 사용했기 때문에 30이다.

  • ++이 변수 뒤로 갔을때,
#include<stdio.h>
 
int main()
{
	int a, total;
 
	a = 2;
	total = a++ * 10;
 
	printf("a : %d, total : %d \n", a, total);
 
 
 
	return 0;
}
 

a는 3이지만, total은 현재 a를 식에서 그대로 사용했기 때문에 20이다.

자료 형 변환

컴퓨터는 같은 자료형 끼리만 연산을 한다.
즉, int형 자료형 끼리의 계산은 연산 결과도 int형이다.

만약 연산 대상이 서로 종류가 다르면???
컴파일러가 같은 자료형으로 자동 형 변환을 시켜준다.

그럼 같은 자료형으로 통일시킬 때는 무슨 규칙으로 하지 싶은데

형 통일 규칙
: char < int < double

오차가 생기지 않는 큰 자료형으로 통일한다고 한다.

대입문에서의 자동 형 변환

우리는 weight=84.6처럼 int형 변수에 double형 실수값을 저장해야하는 경우가 많다.

대입문의 목적은 변수에 값을 저장하는 것이기 때문에 대입문 왼쪽의 변수의 기억장소 크기는 변할 수 없다.

그러므로 식 계산 결과값이 왼쪽 변수 크기에 맞게 자동으로 변형되어 저장된다.

#include<stdio.h>
 
int main()
{
	int age;
	double average;
 
	average = 13.5;
	age = average;
 
	printf("%d살", age);
 
 
	return 0;
}

결국, 실수의 정수 부분만 저장된다.
근데 큰 자료형 값을 작은 자료형 변수에 저장하려면 문제가 발생할 수 있으므로 주의해야 함..

형 변환 연산자

어떤 상황에서만 특별한 다른 자료형으로 잠깐 바뀌게 하는 경우에 형 변환 연산자를 사용한다.

예를 들어, 컴파일러가 n(4)명의 국어 총점이 sum(362)일 때 평균 sum/n를 계산하면
362/4 = 90으로 계산한다.

근데, 이 계산에서만 강제로 형을 변환해주면 정확한 결과를 알 수 있다.

#include<stdio.h>
 
int main()
{
	int sum, n;
	float average;
 
	sum = 362;
	n = 4;
	average = (double)sum / n;
 
	printf("%f점", average);
 
	return 0;
}

int sum, n;으로 선언된 경우

1) (double) sum / (double) n
-> 양쪽 모두 실수형으로 형 변환되므로 결과는 실수형

2) (double) sum / n
3) sum / (double) n

2), 3)의 경우 /의 연산 대상이 double형으로 자동 형 변환되므로 결과는 모두 실수형으로 같다. = 둘 중 하나가 실수면 결과는 실수가 된다.

profile
분석하는 남자 💻

0개의 댓글