3-6 콤마 연산자 , 3-7 비트 연산자


3-6 콤마연산자----------------------------------------------------------------------------------------------

수식을 콤마로 연결할 수 있으며, 각각의 수식은 왼쪽부터 오른쪽으로 순차적으로 실행된다.


1
x++, Y++;
cs

위의 수식에서는 x가 먼저증사되고 이어서 y가 증가된다.


1
2
printf("thank"), printf("you");
= 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
<< 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