반응형
다들 더하기, 빼기, 곱하기 같은 연산자들 아시죠?
C언어에도 당연히 이러한 연산자들이 있습니다.
나는 프로그래밍을 하고 싶은데 머 이렇게 외울게 많아! 하실겁니다.
여기까지만 외우시면 다음부터는 수월해질겁니다.! 물론 내 포스팅하는것도
이걸 전부다 외우라고요? 하핫 저도 사실 다 외우진 못했습니다. 하지만 쓰다보면 대부분 머리에 들어와있습니다.
우선순위 같은 경우는 그래도 다 알아두시는게 좋습니다.
이제 이것들이 무엇을 의미하는지 알아봐야겠죠?
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에 저장하라는 의미이다.
출처 : http://egloos.zum.com/kjlife/v/2329290
다 쓰기가 힘들어서 복사 해왔습니다.
잘정리해놓으셨더라구요.
일부분은 제가 좀 수정했습니다.
이제 주로쓰는것들을 예제로 알아보겠습니다.
예제1
산술 연산자 사용해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main() { int a = 7, b = 2,c; c = a + b;//덧셈 printf("%d + %d = %d\n", a, b, c); c = a - b;//뺄셈 printf("%d - %d = %d\n", a, b, c); c = a * b;//곱셈 printf("%d * %d = %d\n", a, b, c); c = a / b;//나눗셈의 몫 printf("%d / %d = %d\n", a, b, c); c = a % b;//나눗셈의 나머지 printf("%d %% %d = %d\n", a, b, c); return 0; } |
예제2
대입연산자 사용해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main() { int a = 11, b = 3, c = 11; a += b;//덧셈 printf("%d + %d = %d\n", c, b, a); a -= b;//뺄셈 printf("%d - %d = %d\n", c, b, a); a *= b;//곱셈 printf("%d * %d = %d\n", c, b, a); a /= b;//나눗셈의 몫 printf("%d / %d = %d\n", c, b, a); a %= b;//나눗셈의 나머지 printf("%d %% %d = %d\n", c, b, a); return 0; } |
예제3
증감연산자 사용해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int main() { int num = 10; printf("%d\n", num++);//10을 출력후 1증가 printf("%d\n", ++num);//1증가후 12을 출력 printf("%d\n", num--);//12출력후 1감소 printf("%d\n", --num);//1감소후 10출력 return 0; } |
"++"의 위치에 따라 증가감소가 바로 혹은 나중에 일어나는걸 확인 할수있습니다.
지금 나머지것들을 다해보기에는 배운게 적기때문에 차차 써야할때 다시한번 보시길바랍니다.
응용문제
10을 3으로 나눈 나머지를 대입연산자를 통해 구하시고 이 값을 증감연산자를 사용하여 2로 출력되게 해주세요.
반응형
'C언어' 카테고리의 다른 글
[C언어]#6 if, if~else, else 조건문 (1) | 2017.05.04 |
---|---|
[C언어]#5 입력받기 scanf, scanf_s 문 (2) | 2017.04.01 |
[C언어] #3 아스키코드표와 이스케이프 시퀸스 (0) | 2017.03.31 |
[C언어] #2 기본 자료형과 변수 선언하는 방법 (0) | 2017.03.29 |
[C언어] #1 기본 골격설명 &출력기능 puts, printf (1) | 2017.03.29 |