1. ( ) 연산자
int a = 10;
int b = 2;
int c = 1;
int d = a * (b+c);
( ) 연산자는 연산자 우선순위가 가장 높으므로
b+c 가 먼저 연산 된 후에 a 와 곱해지게 된다.
2. [ ] 연산자
int a[3] = { 0,1,2 };
int b = a[0] + a[1] + a[2];
배열을 사용할 때 [ ] 연산자가 + 연산자 보다 우선된다는 의미이다.
3. -> . 연산자
새로운 자료형인 구조체를 만든다고 하면
struct A
{
int a;
int b;
};
이와 같이 정의 할 수 있다.
이것은 A 라는 자료형을 새로 만들었다는 의미인데,
그 A 라는 자료형은 int a, int b 를 가지고 있기 때문에
sizeof(A) 로 자료형의 크기를 알아보면 8 바이트가 된다.
이때
A k; 라고 선언한 후에
k.a = 10;
k.b = 20;
이런식으로 자료형의 내부변수에 값을 읽거나 대입할 수 있다.
이 . 연산자가 = 연산자보다 우선된다는 의미이다.
만약 새로운 자료형 A 를 포인터로 선언하여 메모리르 할당한다면
A* k = new A();
이렇게 할당 할 수 있는데
이때에는
k->a = 10;
k->b = 20;
이런식으로 자료형의 내부변수에 접근 할 수 있다.
이 -> 연산자가 대입연산자보다 우선이 된다는 뜻이다.
4. ++ -- 연산자
int i = 0;
i++;
하거나
i--;
하게되면 i 가 1 증가하거나 1 감소하게 된다.
이것은 (후위) 이고
++i; 또는 --i; 로 표현할 수 있는데
이것이 (전위)이다
만약
int i=0;
int num = i++;
하게 되면 num 에 i 의 값(0) 이 대입된 후에 i 가 1 증가하게 되고.
int i=0;
int num = ++i;
하게 되면 i 의 값이 1 증가 한 후에 num 에 i 값이 대입되게 된다.
(-- 도 동일)
또한 포인터 변수일 경우에 ++ 는 다음 주소로 이동 -- 는 이전 주소로 이동을 의미하게 된다.
5. sizeof 연산자
int i = sizeof(int);
int 는 4byte 크기의 자료형이므로 sizeof(int)는 4를 나타내고
i 에는 4가 대입된다.
6. & 연산자
int num = 10;
int* p = #
할때 & 연산자를 의미하며, 여기에서는 &num 는 num 의 주소값을 의미한다.
void Fuction(int &a)
{
}
라는 함수에서의 &는 레퍼런스의 의미를 갖는다.
나중에
Call By Value
Call By Reference
Call By Address
에 대해 알아보는 시간을 갖도록 하겠다.
7. * 연산자
int num = 10;
int* p = #
*p = 20;
할때 * 연산자를 의미하며, 여기에서는 int* 는 포인터 변수를 의미하고,
*p 는 주소의 메모리 공간을 의미한다. 여기에서는 num 를 의미한다.
8. 단항연산자 - +
int a = 10;
int b = -a;
int c = +a;
라고 할때, 단항연산자의 - 는 부호를 바꿔주고, +는 의미를 명확하게 하기 위해 쓰인다.
실제로 단항 연산자 + 는 코드를 명확하게 하기 위함이 아니라면 쓸일이 없다고 보면 된다.
9. ~ 연산자
int a = 3;
int b = ~a;
~ 연산자는 비트 단위로 0 을 1로 바꾸고, 1을 0으로 바꾸는 연산자이다
3 은 이진수로 00000000000000000000000000000011 이다(4byte모두 표기했음)
~3 은 이진수로 11111111111111111111111111111100 이다
이값은 -4 이다.
00000000000000000000000000000000 이것이 0 이고 -1 하면
11111111111111111111111111111111 이 된다.(-1) 여기에서 -1을 더 하면
11111111111111111111111111111110 이 되고 (-2) 여기에서 -1을 더 하면
11111111111111111111111111111101 이 되고(-3) 여기에서 -1을 더 하면
11111111111111111111111111111100 이 된다(-4)
10. ! 연산자
! 연산자는 참은 거짓으로 만들고
거짓은 참으로 만드는 연산자 이다.
C 언어에서 거짓은 0을 의미하고, 참은 0이 아닌수를 의미한다.
int a = 3;
int b = !a;
printf("%d\n", b);
//결과 0
int a = 0;
int b = !a;
printf("%d\n", b);
//결과 1
11. 형식 캐스팅
아래와 같이 형 변환을 할 때 사용합니다.
char a = 10;
int b = (char)a;
printf("%d\n", b);
// 결과 10
12. 산술연산자(승제연산자) * / %
int a = 10;
int b = 5;
int c = a * b;
int d = a / b;
int e = a % b;
여기에서 * 는 수학에서의 곱셉을 의미하고, / 는 수학에서 나누기를 의미한다.
% 는 나누어서 나머지를 의미한다.
10 % 5 = 0 (10을 5로 나누었을 때 나머지는 0 이다)
10 % 3 = 1 (10을 3으로 나누었을 때 나머지는 1 이다)
13. 산술연산자(가감연산자) - +
int a = 10;
int b = 7;
int c = a+b;
int d = a-b;
라고 할대 여기에서 - 나 + 는 산술연산자로 쓰인다.
14. 시프트 연산자 << >>
int a = 3;
int b = a << 1;
int c = a >> 1;
3 을 이진수로 표현하면 11 이다
11 << 1 을 하면 왼쪽으로 1 비트씩 이동하라는 뜻으로
110 이 된다. 즉 6이 된다.
11 >> 1 을 하면 오른쪽으로 1 비트씩 이동하라는 뜻으로
1 이 된다. 즉 1이 된다.
ex)
int a = 1;
int b = a << 2;
1 은 이진수로도 1 이고
1 << 2 는 왼쪽으로 2비트 이동하라는 뜻으로
100 이 되어 4 가 된다.
15. 비교 연산자 < > <= >=
int a = 3;
int b = 5;
int c = a < b;
printf("%d\n", c);
// 결과 1
int d = a > b;
printf("%d\n", d);
// 결과 0
int e = a <= b;
printf("%d\n", e);
// 결과 1
int f = a >= b;
printf("%d\n", f);
// 결과 0
16. 등가 연산자 == !=
== 같으면
!= 같지 않으면
int a = 3;
int b = 3;
if (a == b)
{
printf("%d\n", a == b);
}
// 결과 1
!= 는 생략
17. 비트 연산자 & | ^
// & 비트연산자는 두 비트를 비교해서 둘다 1이면 1 이되고 그렇치 않으면(하나라도 0이면) 0 이 된다.
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
char a = 7;
char b = 2;
char c = a & b;
printf("%d\n", c);
// 결과 2
7 은 이진수로 00000111 이며, 2는 이진수로 00000010 이다.
00000111
& 00000010
---------------
00000010
// | 비트연산자는 두 비트를 비교해서 둘중 하나이상 1이면 1이 된다.
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
char a = 7;
char b = 2;
char c = a | b;
printf("%d\n", c);
// 결과 7
00000111 (7의 이진수)
00000010 (2의 이진수)
00000111 (7 | 2 의 결과)
// ^ 비트연산자는 두 비트를 비교해서 두 비트가 다르면 1 같으면 0 이 된다.
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
char a = 7;
char b = 2;
char c = a ^ b;
printf("%d\n", c);
// 결과 5
00000111 (7의 이진수)
00000010 (2의 이진수)
00000101 (7^2의 결과)
18. 논리 연산자 && ||
A && B 일때 A 와 B 가 모두 참일 때 참
A || B 일때 A 와 B 중 하나이상이 참일 때 참
char a = 7;
char b = 2;
if (a != b && a >= b)
{
printf("만족합니다");
}
// 결과 만족합니다
a != b 가 참이고, a >= b 가 참이므로
a != b && a >= b 는 참
char a = 7;
char b = 2;
if (a != b || a <= b)
{
printf("만족합니다");
}
// 결과 만족합니다
if ( 참 || 거짓 )
이
if ( 참 )
이 되어 결과는 만족합니다가 출력됩니다
19. 조건 연산자 ? :
(조건) ? (참일때처리) : (거짓일때처리)
int a = 10;
a == 10 ? printf("a==10") : printf("a!=10");
결과 : a==10 이 출력됨
20. 대입연산자 = += -= *= /= %= <<= >>= &= ^= |=
int a = 10;
// a 에 10이 대입된다.
a += 10;
// a = a + 10; 과 같은 의미
a -= 10;
// a = a - 10; 과 같은 의미
a *= 10;
// a = a * 10; 과 같은 의미
a /= 10;
// a = a / 10; 과 같은 의미
a %= 10;
// a = a % 10; 과 같은 의미
a <<= 10;
// a = a << 10; 과 같은 의미
a >>= 10;
// a = a >> 10; 과 같은 의미
a &= 10;
// a = a & 10; 과 같은 의미
a ^= 10;
// a = a ^ 10; 과 같은 의미
a |= 10;
// a = a | 10; 과 같은 의미
21. 콤마 연산자 ,
int a=10, b=20;
// 변수 a 에 10을 대입, 변수 b 에 20을 대입
for (int i = 0, j = 0; i < 10; i++, j++)
{
printf("%d, %d\n", i, j);
}
// 변수 초기화 i=0, j=0
// 조건 i < 10 일 때까지
// 증가 i++, j++
'C언어(2020년)' 카테고리의 다른 글
21. 구조체 (0) | 2020.11.03 |
---|---|
20. bool 자료형 (0) | 2020.11.03 |
18. 연산자 우선순위 (0) | 2020.11.03 |
17. 포인터 (1) | 2020.11.03 |
16. RAM 에 대한 고찰 (0) | 2020.11.03 |