반응형

연산자(2)

 

 

※ 대입 연산자 ※

 

-

 

test3.c
0.00MB

 

 

 

 

-

 

위 사진을 보면 

 

9행 (a = c) > b 구문이 있다.

 

이는 변수 a 변수 c의 값 저장하면서 

 

변수 b의 값 비교하여 결과 값을 출력하고 있다.

 

대입 연산자 후 남아있는 값 a의 값이므로 이와 같은 연산이 가능하다.

 

이 방법을 이용하면 변수 함수의 리턴 값(반환 값)을 저장하는 동시에 

 

리턴 값을 바로 비교할 수도 있다.

 

그리고 실제 많은 프로그램 코드에서 소스 코드의 길이를 줄이기 위해 이와 같은 방법을 많이 사용한다.

 

-

 

 

※ 산술 연산자 ※

 

 

산술 연산 '+', '-', '*', '/', '%' 연산자를 사용한다.

 

위 5개의 연산자 중에서 '+', '-', '*' 연산의 의미는 차례대로 덧셈, 뺄셈, 곱셈이다.

 

'%' 연산자 "나머지(modulus) 연산자"이다.

 

하나의 값을 다른 하나의 값으로 나누었을 때 그 나머지(remainder)를 구하는 연산자이다.

 

-

 

test4.c
0.00MB

 

 

 

-

 

위 사진은 10 % 4에 대한 연산 결과를 출력하고 있다.

 

10 % 4가 의미하는 것은 10을 4로 나눈 나머지를 의미한다.

 

10을 4로 나누게 되면 몫이 2이고 나머지가 2이므로,

 

결과 값으로 나머지 2를 출력하게 된다.

 

일반적으로 프로그램을 작성하면서 나머지 연산을 가장 많이 활용하는 경우

 

일정한 범위의 값을 구하는 경우가 될 수 있다.

 

만약 0부터 n 미만의 값을 필요로 하는 경우, 특정한 값을 대상으로 n의 값으로 나머지 연산을 구하면

 

0부터 n 미만의 값을 쉽게 구할 수 있다.

 

-

 

test5.c
0.00MB

 

 

 

 

-

 

위 사진은 난수 값으로부터 0부터 100 미만의 값을 구하는 방법

 

0부터 50 미만의 값을 구하는 방법을 보여주고 있다.

 

난수를 생성하기 위해서 rand() 함수가 사용되었는데 rand() 함수의 원형은 다음과 같다.

 

-

 

 

-

 

rand() 함수를 사용하기 위해서는 <stdlib.h> 헤더 파일이 필요하며

 

rand() 함수를 호출하면 0부터 rand() 함수를 이용하여 생성 가능한 

 

최대 정수값을 나타내는 RAND_MAX 사이의 정수형 값을 리턴한다.

 

 

위 사진에서는 0부터 100 미만의 값을 구하기 위해서 난수가 저장된 변수 a의 값을 

 

100으로 나누는 나머지 연산을 수행한다.

 

나머지 연산 피연산자 100으로 나눈 나머지를 구하기 때문에

 

최솟값은 100 단위로 나누어 떨어지는 경우 0이 나오게 되고 최대값은 99가 되므로 

 

연산 결과 난수의 값에 따라 0부터 99까지의 값을 갖게 된다.

 

 

만약 0부터 55 사이의 난수 값을 구하기 위해서는 마찬가지로

 

rand() 함수로부터 생성된 값 나머지 연산자를 이용하여 50으로 나눈 나머지를 구하면 된다.

 

특정 범위의 값을 생성할 때 유용한 연산자이다.

 

-

 

※ 형 변환 ※

 

모든 연산자의 기본 원칙은 같은 자료형을 갖는 변수들끼리만 연산할 수 있다는 점이다.

 

만약 서로 다른 자료형 간의 연산을 수행하는 경우에는

 

형 변환(Type Casting)이 일어나게 되는데 형 변환의 종류는 2가지가 있다.

 

-

 

첫 번째 : 컴파일러에서 자동으로 형 변환을 하는 묵시적 형변환

 

두 번째 : 개발자가 직접 형 변환을 하는 명시적 형변환

 

-

 

그렇다면 묵시적 형 변환과 명시적 형 변화의 예제를 봐보자.

 

-

 

test6.c
0.00MB

 

 

 

 

-

 

먼저 위의 묵시적 형 변환에 대해서 봐보자.

 

8번 행 float c = a/b; 구문을 보면

 

a를 b로 나누어 결괏값을 float형 변수 c에 저장하고 있다.

 

일반적으로 10 4 나누면 결과는 2.5로 알고 있다.

 

하지만

 

연산이 되는 피연산자 a와 b의 자료형이 모두 정수형이기 때문에

 

연산이 되는 순간 나머지 버려져서  2 연산 결과로 남게 되고

 

결과 정수형 값 float형으로 자동으로 형 변환이 이루어지면서 변수 c에 저장된다

 

따라서 변수 c에 저장된 값을 출력해보면 float형 값으로 2가 저장되었다는 것을 알 수 있다.

 

-

 

9번 행 float d = (float)a/b; 구문 8행의 연산과 비슷하긴 하지만

 

차이점이 있다면 변수 a 앞에 형 변환 연산자 (float)를 붙여서 

 

실수형(float)으로 a의 자료형을 변환한 뒤에 나누기 연산을 하고 있다는 점이다.

 

산술 연산을 할 때 서로 다른 자료형 간의 연산이 이뤄지게 된다면 다음과 같은 순서

 

데이터를 잃지 않는 자료형으로 형 변환이 이뤄지게 된다.

 

-

 

 

-

 

즉, 9행 (float)a/b 구문에서 float와 int 간의 산술 연산이므로

 

b 또한 float형으로 자동으로 형 변환되어 float와 float의 연산이 된다.

 

따라서 결과로 2.5가 남게 되며

 

이 값이 float형 변수 d 저장되는 것이다.

 

-

 

10번 행 float e = (int)((float)a/b); 구문은 비록 ((float)a/b) 결과로 2.5가 남게 되지만

 

이 값을 정수형(int)으로 강제 형 변환하여 연산 결과는 정수 값 2가 된다.

 

이 값이 float형 변수에 최종적으로 저장된다.

 

-

 

 

이처럼 컴파일러가 자동으로 형 변환하는 경우 형 변환 방향이 데이터의 값을 잃지 않는 쪽으로 변하게 된다.

 

하지만

 

그 반대의 방향으로 강제로 형 변환하면 데이터를 잃을 수 있다.

반응형

'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글

6. 연산자(4)  (0) 2021.02.01
5. 연산자(3)  (0) 2021.02.01
3. 연산자  (0) 2021.02.01
2. 변수와 자료형(2)  (0) 2021.02.01
1. 변수와 자료형  (0) 2021.02.01

+ Recent posts