대입 및 산술연산자에 대해 알아보자.

 

연산자(Operator)  <= 명령어

1. 대입 연산자=> a=b => b의 값을 a에 대입한다.

 

2. 산술 연산자=> a+b => a와 b를 더한다.

나눗셈 시 주의사항은 다음과 같다.

단순히 4/3을 한다면 값은 1이 나온다. 우리가 원하는 값은 1.3333...을 원하는데 이 값이 아닌 정수를 뽑아낸다. 

그러므로 나눗셈 자체를 4.0/3.0으로 처리하여 실수로 계산할 수 있게 해줘야 한다.

코드를 예로 살펴보자.

 

#include <stdio.h>

int main(void){
    int big=0;
    int small=0;
    
    printf("작은수와 큰수를 각각 입력하시오");
    scanf("%d %d",&small,&big);
    
    printf("큰수를 작은수로 나눈 값: %d\n",big/small);
    printf("작은수를 큰수로 나눈 나머지 값: %d",small%big);
    
    return 0;
}

3. 관계 연산자=> a<b => b가 a보다 크다.

4. 논리 연산자=> a&&b => a와 b가 참(true)이다.

 

순서는 다음과 같다.

우선순위 같은 경우는 그래도 다 알아두시는게 좋다.

이제 이것들이 무엇을 의미하는지 알아보자.

 

1. 소괄호 () : 수학에서 괄호 속을 먼저 연산하는 것을 떠올리면 된다.

 

2. 콤마 연산자 : 성격이 동일한 자료형을 나열할 때 쓰인다.

 int num1, num2, num3, ... ;

 

3. 단항연산자 : 1개의 항에 대하여 연산을 해준다.

 3-1) 논리연산자 ! : 피연산자 a의 값이 거짓(0)이면 참(1)을, 그 외의 수는 거짓(0)을 반환한다. 사용법 [ !a ]

 3-2) 비트연산자 ~ : 피연산자 a를 bitwise(비트 반전) 시킨다. 즉, 1100 -> 0011. 사용법 [ ~a ]

 3-3) 증감연산자 ++, -- : 피연산자의 앞에 오냐(전위증가), 뒤에 오냐(후위증가)에 따라 의미가 약간 달라진다.

    ++a (전위증가) 의 경우 a를 1 증가시키고 나머지 연산을 시행하는 반면

    a++ (후위증가) 의 경우 연산을 모두 마친 후, 최종적으로 a를 증가시킨다.

 

    ※ 후위증가가 전위증가보다는 우선순위가 높다. 사용법 [ ++a, --a, a++, a-- ]

 3-4) sizeof(변수, 자료형) : 입력받은 변수 혹은 자료형의 크기를 byte 단위로 반환한다. 사용법 [ sizeof(int), sizeof(a) ]

 3-5) casting연산자 (자료형) : 명시적으로 자료형을 변환해준다. 낮은 곳에서 높은 곳으로 형변환(casting)이 될 때는 데이터 손실이 일어나지 않지만, 높은 곳에서 낮은 곳으로 형변환이 될 때에는 데이터 손실이 일어난다.

   (double)3 : 3이라는 숫자는 정수형이지만, double로 형변환 하여 3.0과 동일한 가치를 지닌다. 상위형변환 이므로 데이터 손실이 일어나지 않는다.

   (int)3.5 : 3.5라는 숫자는 실수형이지만, integer로 형변환 하여 3이라는 가치를 지닌다. 하위형변환 이므로 데이터 손실이 일어난다.

 

4. 산술연산자 : 뺄셈, 곱셈, 나머지연산 - 덧셈, 뺄셈 순으로 수학과 동일하다.

 a+b, a-b, a*b, a/b : 각 연산에 대한 결과 반환. 단, 5/2의 경우 2.5가 아니라 2가 된다. (int / int = int가 되는데 2.5는 double형이므로 하위형변환이 묵시적으로 일어남)

 a%b : a를 b로 나눈 나머지 값을 반환한다. 즉, 123%10 = 3이다.

 

5. 비트이동 연산자 <<, >> : a의 비트를 <<(좌측), >>(우측)으로 b만큼 비트를 이동한다. 밀려나는 값들은 사라지고, 새로운 자리에는 0이 들어온다.

 a << 2 : a의 비트가 00001110 이면 00111000이 된다.

 

 ※ 비트를 왼쪽으로 한 번 이동하는 것은 2를 곱하는 효과, 오른쪽으로 한 번 이동하는 것은 2로 나누는 효과를 가져온다.

 

6. 관계연산자 : 다음 식이 참이면 1을 반환, 거짓이면 0을 반환한다.

 a<b, a>b, a<=b, a>=b, a==b (같다 라는 표현은 =을 두개 사용하여 나타낸다), a!=b (a와 b가 다르다)

 

7. 비트논리연산자 : and, or, xor의 논리값을 반환한다.

 a&b : a와 b가 둘 다 참(1)일 때만 1을 반환한다. 그 외에는 0

 a|b : a와 b가 둘 다 거짓(0)일 때만 0을 반환한다. 그 외에는 1

 a^b : a와 b가 서로 다를 때 1을 반환한다. 그 외에는 0

 

 n bit에 대하여 n 비트 전부를 개별로 검사한다. 그리고 그 값을 개별적으로 반환하여 합하여 계산한다. 

즉, 11000000 & 01000001 = 01000000으로 반환한다. 이는 특정 비트를 검사할 때 매우 유용하다. 특정 비트가 검사된다면 왼쪽 예와 같이 0이 아닌 값을 반환하기 때문이다. 가령 예를 들어 하위 두번 째 비트가 1인지 아닌지 여부를 검사한다고 가정하자. 그러면

& 00000010을 주면 하위 두번 째 비트가 1일 경우에만 0이 아닌 수가 반환된다.

 

11111101 & 00000010 = 00000000 (거짓값 : 하위 두번 째 비트가 1로 세팅되어 있지 않다)

11100011 & 00000010 = 00000010 (참 값 : 하위 두번 째 비트가 1로 세팅되어 있다)

11000000 & 00000010 = 00000000 (거짓값 : 하위 두번 째 비트가 1로 세팅되어 있지 않다)

 

8. 논리연산자 : and, or의 논리값을 반환한다. 이 때에는 피연산자 자체가 0이 아닌 경우 참, 0인 경우 거짓을 나타낸다.

 a&&b : a와 b가 둘다 참일 때만 1을 반환한다. 11111101 && 00000010의 경우 둘 다 0이 아닌 수라 참의 값을 지니므로 결과는 참이 된다. 주로 관계연산자와 같이 사용된다. (a>=b) && (a>100) 와 같이 사용한다.

 a||b : a와 b가 둘다 거짓일 때만 0을 반환한다.

 

9. 조건연산자 : a? b: c 의 꼴이며, a가 참이면 b, 거짓이면 c를 반환한다.

 int max = (a>b)? a: b; 의 형태로 사용된다 // a가 b보다 크면 a, 작으면 b가 반환되서 max라는 변수에 할당이 된다.

 

10. 할당 및 복합 할당연산자 (오른쪽에서 왼쪽으로)

 a = b :  b의 값을 a에 저장한다.

 a += b, a = a+b 와 동일한 의미를 지닌다. a+b값을 a에 저장하라는것을 현재 a값에 b값을 더해 다시 a에 저장하라는 의미로도 해석하는것이다.

 a -= b, a = a-b 와 동일, a와b를 뺀값을 a에 저장하라는 의미이다.

 a *= b, a = a*b 와 동일, a와b를 곱한값을 a에 저장하라는 의미이다

 a /= b, a = a/b 와 동일, a와b를 나눈 몫을 a에 저장하라는 의미이다

 a %= b,a %= b 와 동일, a와b를 나눈 나머지를 a에 저장하라는 의미이다.

 

'Computer engineering > C' 카테고리의 다른 글

If-else 조건문  (0) 2021.04.21
If 조건문  (0) 2021.04.11
3. #define이란?  (0) 2021.04.01
2. 수의 체계 -실수  (0) 2021.03.25
1. 수의 체계 -보수  (0) 2021.03.25

+ Recent posts