(1) 쉬프트 연산자
비트를 이동시키는 연산자로 오른쪽으로의 이동과 왼쪽으로의 이동하는 두 가지 종류의 방식이 있다.
연산자 | 뜻 | 예 | 의미 |
>> | 오른쪽으로 이동 | 5>>2 | 5의 이진수표현에서 오른쪽으로 2칸 쉬프트 |
<< | 왼쪽으로 이동 | 5<<2 | 5의 이진수표현에서 왼쪽으로 2칸 쉬프트 |
예제
#include<stdio.h>
void main(){
int a, b, c;
a = 5;
b = 2;
c = a >> b; 5 >> 2 5를 오른쪽으로 비트2개를 이동하라
printf("%d \n", c);
}
결과 1
5의 이진수는 0 0 0 0 0 1 0 1
오른쪽으로 2칸 이동 0 0 0 0 0 1 0 1 0 1 은 칸을 넘어가서 사라진다
▽
0 0 0 0 0 0 0 1 1의 이진수
예제2
#include<stdio.h>
void main(){
int a, b, c;
a = 5;
b = 2;
c = a << b; 5 >> 2 5를 오른쪽으로 비트2개를 이동하라
printf("%d \n", c);
}
5의 이진수는 0 0 0 0 0 1 0 1
왼쪽으로 2칸이동 0 0 0 0 0 1 0 1 0 0 왼쪽의 0 0이 밀려서 사라지고 오른쪽 빈칸에 0 0 으로 채워진다.
0 0 0 1 0 1 0 0 20의 이진수
16 8 4 2 1
(1)비트 연산자 &(and)
예제
#include<stdio.h>
void main(){
int a, b, c;
a = 30;
b = 25;
c = a & b;
printf("%d \n", c);
}
30의 이진수 0 0 0 1 1 1 1 0
▽ & and 니까
25의 이진수 0 0 0 1 1 0 0 1
24의 이진수 0 0 0 1 1 0 0 0
(2)비트 연산자 | pipe (or)
예제 2
#include<stdio.h>
void main(){
int a, b, c;
a = 30;
b = 25;
c = a | b;
printf("%d \n", c);
}
30의 이진수 0 0 0 1 1 1 1 0
▽ | or이니까
25의 이진수 0 0 0 1 1 0 0 1
31의 이진수 0 0 0 1 1 1 1 1
(1) 비트 XOR, NOT연산자
비트의 논리 연산자인 ^(비트 XOR), ~(비트 NOT)
비트 XOR 연산자 ^의 진리표
x | y | x^y | 의미 |
0 | 0 | 0 | 거짓 |
0 | 1 | 1 | 참 |
1 | 0 | 1 | 참 |
1 | 1 | 0 | 거짓 |
두개의 비트가 같으면 거짓(OR과 반대로 표현)
예제
#include<stdio.h>
void main(){
int a, b, c;
a = 30;
b = 25;
c = a ^ b;
printf("%d \n", c);
}
30의 이진수 0 0 0 1 1 1 1 0
^ Xor이니까
25의 이진수 0 0 0 1 1 0 0 1
▽
7의 이진수 0 0 0 0 0 0 1 1 1
4 2 1
예제 2
#include<stdio.h>
void main(){
int a, b, c;
a = -1;
b = -4;
c = ~a ;
printf("%d \n", c);
c = ~b ;
printf("%d \n", c);
}
1 1 1 1 1 1 1 1 -> -1의 이진수
~
▽
0 0 0 0 0 0 0 0 -> 0의 이진수
1 1 1 1 1 1 0 0 -> -4의 이진수
~
▽
0 0 0 0 0 0 1 1 -> 3의 이진표현
이진수를 뒤집어준다.
(1)증감연산자
어떤 변수에 대해 1증가하고 1감소하는 표현하는 표현으로 다음의 2종류가 있다.
종류 | 예 | 의미 |
전위형 | ++a | a = a+1 또는 a +=1 |
--a | a = a-1 또는 a -= 1 | |
후위형 | a++ | a = a+1 또는 a + = 1 |
a-- | a = a-1 또는 a -=1 |
예제
#include<stdio.h>
void main(){
int a, b, c;
a = 10;
b = 20;
c = 3;
printf("++a = %d\n", ++a);①. ++a 는 a를 1증가시킨다 11
printf("a++ = %d\n", a++);② 11
printf("c++ = %d\n", c++);③. 3
printf("++a + b++ = %d\n",++a + b++);④ 33
printf("++a + ++b = %d\n",++a + ++b);⑤
printf("++a + b++ * --c = %d\n", ++a + b++ * --c);⑥
}
결과
++a = 11
a++ = 11
c++ = 3
++a + b++ = 33
++a + ++b = 36
++a + b++ * - -c = 81
a b. c
10. 20 4
11. 21. 3
12. 22
13
14
15

'C언어 공부' 카테고리의 다른 글
2022/08/27 C언어 공부 (8회차) (0) | 2022.08.29 |
---|---|
2022/08/26 C언어 공부 (7회차) (0) | 2022.08.26 |
2022/08/23 C언어 공부 (5회차) (0) | 2022.08.23 |
2022/08/21 C언어 공부 (4회차) (0) | 2022.08.21 |
2022/08/18 C언어 (3회차) (0) | 2022.08.18 |