연산자의 종류
- 데이터 : 불규치학게 널려 있는 여러가지 형태의 수치나 문자열. 사실적인 정보.
정보 : 데이터를 가공하여 사용할 수 있도록 정리된 유용한 것기능별 종류
연산자
산술 연산자
+ - * / %
부호 연산자
+ -
대입 연산자
= 복합 대입 연산자
관계 연산자 == != <= < >= >
증감 연산자 ++ -- 포인터 연산자 * & [] 구조체 연산자 . -> 논리 연산자 || && ! 비트 연산자 | & ~ >> << 삼항 조건 연산자
: ?
쉼표 연산자
,
sizeof 연산자 sizeof
캐스트 연산자
(type)type()
괄호 연산자
() C++ 연산자
new delete :: .* ->*
산술 연산자
- 산술 연산자
- 더하고 곱하고 빼고 나누는 가장 기본적이고 또한 가장 많이 사용 되는 연산자
- 일상해서 주로 사용하는 연산자
- +, - 기호와 평상시에는 X를 쓰지만 알파벳과 비슷해 *를 사용
- ¸ 기호를 사용하지만 없어서 / 를 이용
- /의 경우 피연산자의 파입에 따라 다르다
- 피연산자가 모두 정수형이면 결과도 정수형
- 피연산자 중 실수형이 있으면 결과도 실수형이다. - 대입연산자
- 변수에 어떤 값을 집어 넣는 동작이며 대입 연산자는 변수의 값을 변경할 때 사용
(예시 : i=1 / i 라는 값에 1을 대입한다 라는 뜻)
- 좌변에는 항상 변수만 올 수 있다.
(실제적인 메모리를 점유하고 있고 값을 바꿀 수 있는 대상)
1=a+2; / a+b = 4 와 같은 형태는 불가능.
- 연산자의 리턴값
a=5; b=5; c=5; 를 줄이면
a=b=c=5; 와 같은 형태로 줄일 수 있다.
- 복합 대입 연산자
- 대입연산자와 다른 연산자가 결합된 연산자
a = a+3; => a+=3; - 증감 연산자
- 피연산자를 1씩 증가 시키거나 감소 시킨다
- 루프의 제어 변수처럼 순서대로 어떤 작업을 할 때는 변수값을 하나씩 증감시키는 경우가
많아 별도의 연산자 장치가 마련 (++ : 증가, -- : 감소)
- 전위형(Prefix) : 증감연산자가 피연산자 앞에 위치 ( ++a, --a )
- 후위형(Postfix) : 증감연산자가 피연산자 뒤에 위치 ( a++, a-- )
- 다른 언어에는 없는 C 언어의 아주 독특한 연산자이며 사용해 보면 아주 편리
논리 연산자
관계 연산자
- 피연산자를 두 개 취하는 이항 연산자이며 좌변과 우변을 비교하여 같은지, 다른지, 다르면
어느 쪽이 더 큰지 조사
연산자 | 조건 |
== | 좌변과 우변이 같다. |
!= | 좌변과 우변이 다르다. |
> | 좌변과 우변보다 크다. |
< | 좌변과 우변보다 작다. |
>= | 좌변과 우변보다 크거나 같다. |
<= | 좌변과 우변보다 작거나 같다. |
- 논리 연산자
- 주로 관계 연산자와 함께 사용되며 두 개 이상의 조건식을 결합하여 하나의 진리 값을 만든다
- ! 연산자는 조건식 하나를 피연산자로 취하는 단항연산자로서 조건식을 반대로 바꾼다
결과 : 거짓 => 참 / 참 => 거짓
연산자 | 조건 |
! | 좌변과 우변이 같다. |
&& | 좌변과 우변이 다르다. |
|| | 좌변과 우변보다 작거나 같다. |
- && 연산자와 || 연산자는 두 개의 논리식을 피연산자로 가지는 이항 연산자
두 논리식의 값을 정해진 규칙에 따라 결합하여 하나의 진리 값(아래 참고할 진리표)
좌변 논리식 | 우변 논리식 | && 연산자 | || 연산자 |
1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 |
0 | 0 | 0 | 0 |
- 비트 연산자
- 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 다르다.
- 비트란 기억장치의 최소 단위로서 1 또는 0을 기억하면 8개의 비트가 모여야 1바이트
연산자 | 설명 |
~ | 비트를 반전 시킨다. |
& | 대응되는 비트가 모두 1일 때 1이다. |
| | 대응되는 비트가 모두 0일 때 0이다. |
^ | 두 개의 비트가 달라야 1이다. |
<< | 지정한 수 만큼 왼쪽으로 비트들을 이동시킨다. |
>> | 지정한 수 만큼 오른쪽으로 비트들을 이동시킨다. |
b1 | b2 | b1 & b2 | b1 | b2 | b1 ^ b2 | ~b1 |
0 | 1 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
- 쉬프트 연산자
- 비트들을 지정한 수 만큼 좌우로 이동시킨다.
- >> 연산자는 오른쪽으로 이동시키며 << 왼쪽으로 비트들을 이동시킨다.
<우측이동 쉬프트> <좌측이동 쉬프트>
- 쉬프트 연산과 곱셉
- 쉬프트를 왼쪽으로 한칸 해보면 입력한 수의 정확하게 2배 되는 값이
출력 5를 입력하면 10, 100을 입력하면 200이 출력
a << b == 1 * 2^b
- 회전 연산
- 쉬프트 연산과 유사한 비트 조작 명령
쉬프트는 비트를 선형으로 이동시키는데 비해 회전 연산은 원형으로 이동시킨다.
비트 이동에 의해 밀려나는 비트는 버려지지 않고 반대쪽으로 다시 이동.
<rotl, rotr 함수 사용>
기타 연산자
- 삼항 조건 연산자 : (조건식)? 값1:값2
다른언어에는 없는 C언어의 톡특한 연산자
조건식의 값이 참이면 값1 거짓이면 값를 리턴
if문을 이용해서도 변환이 가능하다. - 쉼표연산자 : , 사용,
피연산자로 양쪽에 두 개의 표현식을 취해 좌변->우변 순서로 평가하고 우변의 연산 결과를 리턴
두 개의 표현식을 하나로 합칠 수 있다. - sizeof 연산자
sizeof(타입 Or qustn)
피연산자로 int, double같은 타입이나 변수를 이용하거나 상수를 사용할 수도 있다. - 캐스트 연산자
(타입)변수 => C언어타입
타입(변수) => C++ 타입
수식 내에서 변수의 타입을 강제로 다른 타입으로 변경
연산 규칙
- 연산 순위
순위
연산자
결합순서
1
( ) [ ] -> .
왼쪽 우선
2
! ~ ++ -- + -(부호) *(포인터) & sizeof 캐스트
오른쪽 우선
3
*(곱셈) / %
왼쪽 우선
4
+ -(덧셈, 뺄셈)
왼쪽 우선
5
<< >>
왼쪽 우선
6
< <= > >=
왼쪽 우선
7
== !=
왼쪽 우선
8
&
왼쪽 우선
9
^
왼쪽 우선
10
|
왼쪽 우선
11
&&
왼쪽 우선
12
||
왼쪽 우선
13
? :
오른쪽 우선
14
= 복합대입
오른쪽 우선
15
,
왼쪽 우선
- 결합 순서
- 수식 내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정
- 다른 종류의 연산자에 대한 실행 순서인 반면 결합순서는 같은 연산자 또는 같은 순위
내의 다른 연산자의 실행순서 지정
(double)(unsigned)i; 의 경우 unsigned => double - 산술 변화
- 데이터 타입이 조금 다른 변수 끼리라도 자동으로 변호나 가능한 연산을 허용
연산자는 산술, 논리, 기타 등으로 구성된다
연산 규칙에는 순위와 결합순서 산술변화 등으로 구성된다.
출처 : Soen(soen.kr)
'언어 > C' 카테고리의 다른 글
기억부류 (0) | 2016.03.19 |
---|---|
함수와 프로시저 (0) | 2016.03.18 |
제어문 (0) | 2016.03.13 |
getch / getche / getchar / putchar / puts (0) | 2016.03.11 |
printf 서식문자 (0) | 2016.03.10 |