본문 바로가기

BackEnd/C

비트연산자

반응형



1. 비트연산자의 이해


비트 연산자의 대부분이 이항 연산자이며, 피연산자는 반드시 정수이어야 한다.


비트 연산자는 비트단위로 연산을 진행하는 연산자이며, 연산의 결과를 묶어서 하나의 연산결과를 반환한다.



2. 비트연산자들의 종류와 기능



1) & 연산자 : 비트단위 AND 연산자


두개의 비트가 모두 1인 경우에만 1을 반환하여 연산결과를 구성한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    int n1=15;         /*  00000000 00000000 00000000 00001111  */
    int n2=20;         /*  00000000 00000000 00000000 00010100  */
 
    int result=n1&n2;  /*  00000000 00000000 00000000 00000100  */
 
    printf("n1=%d \n", n1);
    printf("n2=%d \n", n2);
    printf("result=%d \n", result);
 
    return 0;
}



1
2
3
n1=15
n2=20
result=4



2) | 연산자 : 비트단위 OR 연산자


| 연산자는 두 개의 비트 중에서 어느 하나라도 1이면 1을 반환하여 연산결과를 구성한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    int n1=15;         /*  00000000 00000000 00000000 00001111  */
    int n2=20;         /*  00000000 00000000 00000000 00010100  */
 
    int result=n1|n2;  /*  00000000 00000000 00000000 00011111  */
 
    printf("n1=%d \n", n1);
    printf("n2=%d \n", n2);
    printf("result=%d \n", result);
 
    return 0;
}
cs


1
2
3
n1=15
n2=20
result=31
cs


3) ^ 연산자 : 비트단위 XOR 연산자


^연산자는 두 비트의 값이 서로 다를 때 1을 반환하여 연산결과를 구성하는 연산자이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    int n1=15;         /*  00000000 00000000 00000000 00001111  */
    int n2=20;         /*  00000000 00000000 00000000 00010100  */
 
    int result=n1^n2;  /*  00000000 00000000 00000000 00011011  */
 
    printf("n1=%d \n", n1);
    printf("n2=%d \n", n2);
    printf("result=%d \n", result);
 
    return 0;
}
cs

1
2
3
n1=15
n2=20
result=27
cs


4) ~ 연산자 : 비트단위 NOT 연산자


~ 연산자는 1을 0으로, 0은 1로 비트를 반전시켜서 얻은 결과를 반환한다.


~ 연산자는 가장 왼쪽에 있는 부호비트도 반전시킨다.


~ 연산자는 피연산자가 양수일때 음수를 반환한다.


~ 연산자는 피연산자가 음수일때 양수 또는 0을 반환한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    int n1=-1;         /*  11111111 11111111 11111111 11111111  */
    int n2= 0;         /*  00000000 00000000 00000000 00000000  */
 
    int result1=~n1;   /*  00000000 00000000 00000000 00000000  */
    int result2=~n2;   /*  11111111 11111111 11111111 11111111  */
 
    printf("result1=%d \n", result1);
    printf("result2=%d \n", result2);
 
    return 0;
}
cs


1
2
result1=0
result2=-1
cs


반응형

'BackEnd > C' 카테고리의 다른 글

비트 마스크  (0) 2019.03.09
비트 쉬프트(Shift) 연산자  (0) 2019.03.09
.  (0) 2019.03.08
.  (0) 2019.03.08
변수의 종류에 따른 특성과 할당 위치  (0) 2019.03.05