3-6 콤마연산자----------------------------------------------------------------------------------------------
수식을 콤마로 연결할 수 있으며, 각각의 수식은 왼쪽부터 오른쪽으로 순차적으로 실행된다.
1 | x++, Y++; | cs |
위의 수식에서는 x가 먼저증사되고 이어서 y가 증가된다.
1 2 | printf("thank"), printf("you"); x = 2, y = 3, z = 4; | cs |
한정된 공간에 여러 개의 문장을 넣을 때도 사용된다.
3-7 비트연산자----------------------------------------------------------------------------------------------
컴퓨터에서 모든 데이터는 결국 비트로 표현된다. 비트는 컴퓨터에서 정보를 저장하는 가장 작은 단위이며 0과 1로 이루어져있다.
우리가 주로 사용하는 int형에는 32개의 비트가 사용된다.
연산자 |
의미 |
예 |
& |
비트 AND |
모두 1이면 1, 아니면0 |
| |
비트 OR |
하나만 1이면1, 아니면 0 |
^ |
비트 XOR |
같으면0, 아니면1 |
<< |
왼쪽으로 이동 |
지정된 개수만큼 모든 비트를 왼쪽으로 이동 |
>> |
오른쪽으로 이동 |
지정된 개수만큼 모든 비트를 오른쪽으로 이동 |
~ |
비트 NOT |
0은1, 1은0으로 만든다. |
이러한 비트 단위 연산자는 정수 타입의 피 연산자에만 적용가능하다. (int, char, short, long)
비트 AND
비트 단위로 AND연산을 수행한다. 즉, 피연산자가 모두 1인 경우에만 1을 반환한다.
00001001
00001010
-----------
00001000
비트 OR
비트 단위로 OR연산을 수행한다. 즉, 피연산자가 하나라도 1인 경우에만 1을 반환한다.
00001001
00001010
-----------
00001011
비트 XOR
비트 단위로 XOR연산을 수행한다. 즉, 두개의 피연산자가 같으면 0, 다르면 1을 반환한다..
00001001
00001010
-----------
00000011
비트 NOT
비트 단위로 NOT연산을 수행한다. 즉, 피연산자가 0이면1, 1이면0으로 만든다.
00001001
-----------
11110110
비트 이동 연산자(<< , >>)
지정된 숫자만큼 전체 비트를 이동한다.
EX)
1 | x << y | cs |
x의 비트들은 y칸만큼 해당방향으로 이동.
00000100
-----------
00001000
이과정에서 제일 끝에있는 비트는 밀려나면서 없어지게되고 오른쪽에 발생되는 새로운 비트는 0으로 채워진다.
---------
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { printf("AND : %08X\n", 0x9 & 0xA); printf("OR : %08X\n", 0x9 | 0xA); printf("XOR : %08X\n", 0x9 ^ 0xA); printf("NOT : %08X\n", ~0x9); printf("<< : %08X\n", 0x4 << 1); printf(">> : %08X\n", 0x4 >> 1); } | cs |
AND : 00000008
OR : 0000000B
XOR : 00000003
NOT : FFFFFFF6
<< : 00000008
>> : 00000002
D:\[work]\Visual Studio\Project2\Debug\Project2.exe(12512 프로세스)이(가) 0 코드로 인해 종료되었습니다.
이 창을 닫으려면 아무 키나 누르세요.
// %08X == 16진주로 8자리만큼 표현
-------------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | //10진수를 2진수로 출력하는 프로그램 #include <stdio.h> int main() { unsigned int num; printf("10진수 : "); scanf("%u", &num); unsigned int mask = 1 << 7; printf("2진수 : "); ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0") : printf("1"); mask = mask >> 1; ((num&mask) == 0) ? printf("0\n") : printf("1\n"); mask = mask >> 1; } | cs |
10진수 : 32
2진수 : 00100000
D:\[work]\Visual Studio\Project2\Debug\Project2.exe(2924 프로세스)이(가) 0 코드로 인해 종료되었습니다.
이 창을 닫으려면 아무 키나 누르세요.
---------------------------------------------------------------------------------------------------------------------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> // xor을 이용한 암호화 int main() { char data; char key = 0xff; char encrpted_data; printf("암호화할 문자입력 : "); scanf("%c", &data); encrpted_data = data ^ key; printf("압호화된 문자=%c \n", encrpted_data); char orig_Data; orig_Data = encrpted_data ^ key; printf("원래의 데이터=%c\n", orig_Data); } | cs |
암호화할 문자입력 : a
압호화된 문자=?
원래의 데이터=a
D:\[work]\Visual Studio\Project2\Debug\Project2.exe(15412 프로세스)이(가) 0 코드로 인해 종료되었습니다.
이 창을 닫으려면 아무 키나 누르세요.
'C 프로그래밍 > 3. 수식과 연산자' 카테고리의 다른 글
3-9 연산자의 우선순위와 결합 규칙 (0) | 2019.05.16 |
---|---|
3-8 형변환 (0) | 2019.05.15 |
3-5 조건 연산자 (0) | 2019.05.14 |
3-4 논리 연산자 (0) | 2019.05.14 |
3-3 관계 연산자 (0) | 2019.05.14 |