[C언어] 5.C언어 기초(3)
이번에는 연산자 라는것에 대해 적어볼까합니다.
연산자란 말 그대로 C언어에서 연산을 하게 해주는 기호등을 말합니다. +,- 이런걸 말하는거죠.
연산자의 우선순위
C언어의 연산자에도 우선 순위라는게 있습니다. 곱하기가 덧셈보다 더 빨리 계산하는 것 같은거죠.
다른건 다 이해가 갈꺼라생각되고, 결합순서에 대해 애매 할 꺼라 생각되네요.
결합순서는 간단하게 연산자의 화살표방향으로 연산한다라고 생각하시면됩니다.
솔직히 연산자는 A연산자B 대부분 이렇게 사용하기 때문에 연산자를 사용할 때 아직까지는 그렇게 중요하지 않고, 사용하다보면 이해가 되는 겁니다.
산술 연산자
산술 연산자는 말 그대로 산술 연산자입니다.
+,-,*,/ 입니다.
딱 보면 아시겠지만 순서대로 덧셈(+),뺄셈(-),곱셈(*),나눗셈(/)입니다.
그리고 하나 더 %가 있습니다.
%는 MOD연산인데요. 나머지연산이라고 합니다. 컴퓨터에서 이게 왜 필요해? 할 수도 있겠지만 암호학등에서 매우 중요하게 쓰입니다.
관계 연산자
관계 연산자는 그냥 부호라고 생각하시면 됩니다. < 나 > 이런거죠.
a < b : a가 b보다 작은 가?
a <= b : a가 b보다 같거나 작은 가?
a > b : a가 b보다 큰 가?
a >= b : a가 b보다 같거나 큰 가?
a == b : a와 b가 같은가?
a != b : a와 b가 다른가?
같은가? 에서 왜 =를 안쓰고 ==을 쓰는 이유는 =은 대입연산자라고 a=5 이런식으로 변수등에 무언가 넣을 때 사용됩니다.
그렇기 때문에 =를 안쓰고 ==를 사용하는거죠.
관계 연산자의 결과는 참이나 거짓(1또는 0)으로 밖에 안나옵니다. (0 이외의 수는 모두 참으로 인식합니다.)
당연한 소리지만 매우 중요한 말입니다.
논리 연산자
논리 연산자는 이해하기 꽤 힘들 수도 있습니다.
불 대수라는것을 알고 계신다면 이해하기 편합니다. 저는 이걸 컴퓨터쪽(논리회로)으로 알았지만 전기회로나 이런곳에서도 쓰입니다.
크게 OR(논리 합) AND(논리 곱) NOT(부정)이 있습니다.
OR은 둘 중 하나라도 참이면 참.
AND는 양 쪽 참이여야만 참.
XOR은 서로 값이 달라야만 참.
논리 연산자도 A OR B 이런식으로 2개의 피연산자와 하나의 연산자로 사용됩니다.
논리 연산자도 관계연산자처럼 결과 값이 참과 거짓(1또는 0)으로만 나옵니다.
생각보다 매우 간단합니다.
위가 논리회로에서 사용되는 기호를 정리한겁니다.
그래픽 기호나 함수식,buffer,NAND,NOR,XNOR이런건 모르셔도 됩니다.
근데 만약 컴퓨터나 전기 전공하시면 언젠가 논리회로라고 보시게 될거고 이거때문에 머리 아플 수도 있습니다.
우리가 필요한건 AND,OR,XOR,NOT의 진리표입니다.
진리표에서
AND를 보시면 A,B가 1,1 그러니 모두 참일때만 결과가 1으로 나오고 나머지 결과는 0으로 나옵니다.
OR은 0,0(거짓,거짓)이 아니라면 결과가 참(1)으로 나옵니다.
XOR은 A,B와 서로 다를 때에만 결과가 참(1)으로 나옵니다.
NOT은 참(1)일 경우 거짓(0)으로 거짓(0)일 경우 참(1)으로 나오구요.
대입 연산자
대입 연산자에는 =,+=,-=,*=,/=,%= 이런것들이 있습니다.
=는 식이 a=b라고 되어있다면 a는b다.b를 a에 넣는다. 매우 간단한거라서 더 설명할게 없네요.
그런데 +=,-=,*=,%= 라는게 뭔가 싶을 겁니다.
이건 그냥 줄임말 같은건데요.
+= : a = a+b를 a += b 처럼 줄일 때 사용합니다.
그러니까 a = a+b와 a += b 는 같은 거란거죠.
a = a+b == a += b
-=도 +=와 마찬가지입니다.
a = a-b == a -= b
*=도 마찬가지구요 /=,%=도 마찬가지입니다.
a = a*b == a *= b
a = a/b == a /= b
a = a%b == a %= b
증감 연산자
증감 연산자에는 ++가 사용됩니다. --도 있구요.
뜻은 ++는 1증가(a=a+1) --는 1감소(a=a-1)입니다.
사용 방법은 ++a,a++ 처럼 변수의 앞이나 뒤에 적어주면 됩니다.
앞에 적었을 때는 전위 연산자 뒤에 적었을 때는 후위 연산자라고 합니다.
전위 연산자와 후위 연산자의 차이는 전위 연산자는 사용 전에 연산,후위 연산자는 사용 후 연산의 차이인데요.
만약 a=10 printf("%d",a)라고 명령을 한다면 10이라고 출력이 될겁니다.
a=10 printf("%d",++a)라고 하면 11이 출력이 됩니다.
a=10 printf("%d",a++)라고 한다면 10이 출력됩니다.
분명히 앞에서 ++a라고 했을 때 11이 출력됬는데 a++을 하고 출력하면 10이 출력되는 이유는 ++a는 사용 전 증가 시키고 a++은 사용 후에 증가를 시키기 때문입니다.
만약 a=10 printf("%d",a++)을 한번 사용 한 후에 한번 더 pritnf("%d",a)만 하면 11이 출력되는거죠.
--도 ++와 마찬가지입니다. 대신 1이 감소된다는게 다르죠.
캐스팅 연산자
한국어로 형변환이라고 말합니다.
변수의 형태를 변환 해주는거죠. 사용 방법은 (형태)변수 이렇게 사용합니다.
예를 들어 int a = 3 float b = 3.14로 선언했다고 합시다.
여기서 a = a+b라고 하면 오류가 뜹니다. C언어에서는 정수+실수등의 연산은 안되니까요.
허나 a = a+(int)b라고 하면 연산이 됩니다. b를 int로 변환했기 때문이죠. 실수를 정수로 형변환 할 때에는 소수점은 버리고 정수부분만 바뀝니다.
이런식으로 사용 할 수도있습니다. float b=3.11 double c=99.11 printf("%c",(char)(a+b))
변수 a와 b를 더한 뒤에 char로 형변환하여 출력하는거죠. 결과는 102에 해당하는 아스키코드값이 나올겁니다.
sizeof 연산자
sizeof 연산자는 말 그대로 크기를 알려주는 연산자입니다.
int나 char같은 형태에 대한 크기,변수에 대한 크기등을 알려줍니다.
만약 printf("%d",sizeof(int))라고 선언을 한다면 결과는 4가 나옵니다. int의 크기는 4byte니까요.
printf("%d",sizeof(char))을 하면 1이 나오죠 char의 크기는 1byte니까요.
int a = 0; printf("%d",sizeof(a))는 a라는 변수의 크기를 물어보는 건데요. 4가 나옵니다. 변수 a는 int니까요.
C언어 고급과정에 들어갈 때까지 볼 일 없는 연산자입니다.
동적메모리를 사용할 때 사용하거든요.
연산자는 대부분 수학에서 사용하는 걸 그대로 사용하는거고 실습 한번 해보시면 이해하기 쉬울겁니다.
추천1
[신고]