-
연산자와 수식 - 바로 실행해보면서 배우는 C언어CS/C언어 2019. 12. 23. 07:05
기본 연산자 + - * / %
사칙연산 연산자
증감 연산자 ++ --
변수에 담겨있는 값을 증가시키거나 감소시키는 연산자. 전위와 후위로 나뉘어짐
전위 증감 연산자 : 값을 먼저 증가시키거나 감소시킨 후에 코드 실행 (++a)
후위 증감 연산자 : 코드 실행 후에 값을 증가시키거나 감소시킴. (a++)
관계 연산자
==같다
!= 같지 않다
/ true : 1, false : 0
논리 연산자
논리곱 연산(&&), 논리합 연산(||)
복합 대입 연산자 +=, -=, ...
연산과 동시에 변수에 대입시키는 연산자
비트 연산자
2진수 값을 이용해 연산하는 연산자
비트 연산은 정수/정수로 변환 가능한 타입만 연산 가능. (실수, 포인터 등은 X).
비트 단위로 계산하기 때문에(=비트 단위에서 직접 조작하기 때문에) 일반적인 사칙연산 연산자보다 훨씬 속도가 빠르다. 적절하게 사용하면 메모리 공간의 효율성을 높이고 연산 수를 줄일 수 있다.
(*비트 : 컴퓨터에서 사용할 수 있는 최소 단위로, 0과 1로 이루어지는 2진수를 저장한다.)
& (AND 연산) : 두 개의 비트가 모두 1일 때만 1을 반환.
논리 연산자 &&와는 다름. 논리 연산은 true/false를 반환하지만 비트 연산은 값을 반환함.
주소값을 가리키는 &연산자와도 다름. 주소값을 나타내는 &연산자는 단항연산자이지만, 비트연산자는 두개 이상의 피연산자를 필요로 함. ex- a & b
[Ex]
0000 1010 = 10
0000 0110 = 6
0000 0010 = 2
10 & 6 → 2 반환.
| (OR 연산) : 두 개의 비트 중 하나라도 1이면 1을 반환.
^ (XOR 연산) : 두 개의 비트가 다르면 1을 반환.
~ (NOT, 단항 연산자) : 한 값의 비트를 모두 반전시킴.
비트연산자의 대입연산자 : &=, |=
비트 이동 연산자
<< 연산자(왼쪽 shift) : 지정한 횟수대로 비트의 자리를 왼쪽으로 이동시키는 연산자.
이동해서 생기는 오른쪽 빈 비트들은 0으로 채워지며, 제일 왼쪽에서 밀려나는 비트들은 버려진다.
한 칸 이동할 때마다 값은 2배가 된다. x2의 1승, x2의 2승, x2의 3승, x2의 4승...
⇒ n칸 이동했다면 2의 n승을 곱하면 된다. 따라서 2의 n승을 곱하는 연산을 할때, 비트 왼쪽 이동연산으로 대체하면 일반 사칙연산보다 속도가 빠르다.
※ char형은 8비트지만 int형은 32비트이기 때문에 왼쪽으로 비트 이동을 할 때 잘리는 크기가 다르다.
※ unsigned형과 달리 부호비트가 있는 자료형(signed* 등)은 MSB의 자리로 비트가 이동하면 보수 연산을 하게 된다.
>> 연산자(오른쪽 shift) : 지정한 횟수대로 비트의 자리를 오른쪽으로 이동시키는 연산자.
<< 연산자와 정확히 반대.
※ MSB 주의!
signed자료형이고 음수일 때(맨 왼쪽 값이 1일 때) 오른쪽으로 이동하면서 생기는 빈 비트의 경우, 음수를 유지하기 위해 빈 비트들을 1로 채우는 CPU도 있고, 음수와는 상관없이 무조건 0을 채우는 CPU도 있다.
EX) 1111 0000를 오른쪽으로 두 칸 이동 → 0011 1100(0으로 채우기) or 1111 1100(1로 채우기)
※ 음수를 이진수로 변환하기
-16 : 1111 0000
(첫번째 자리는 MSB 비트 = 부호 자리. 두번째 자리부터 2의 1승, 2의 2승, 2의 3승...)
*signed char : 부호 있는 정수. 8비트 변수. 맨 왼쪽 비트는 부호비트. 부호비트는 MSB(Most Significant Bit)라고 부르며, 0이면 양수, 1이면 음수를 나타냄. 음수일 경우 "보수연산"을 하게 됨. (C언어 보수연산 검색)
※ 출처 : 바로 실행해보면서 배우는 C언어, 4강 연산자와 수식
'CS > C언어' 카테고리의 다른 글
조건문 - 바로 실행해보면서 배우는 C언어 (0) 2019.12.29 이중 반복문(실습) - 바로 실행해보면서 배우는 C언어 (0) 2019.12.28 일차원 배열 - 바로 실행해보면서 배우는 C언어 (0) 2019.12.28 문자열 - 바로 실행해보면서 배우는 C언어 (0) 2019.12.22 반복문 - 바로 실행해보면서 배우는 C언어 (0) 2019.12.21