[고급 C++] 비트연산자
- 컴퓨터공학과/Programming
- 2020. 11. 2.
비트연산자 |
비트연산자
특징
- 응용 프로그램에서 비트단위(2진수) 연산을 할 때 사용되는 연산자
- 속도가 빠름
- &|~^>><<
예시
#include <stdio.h>
int main()
{
char n1 = 9, n2 = 5, n3;
int i;
printf("%d : ", n1);
for(i=128; i > 0;i = i/2)
if(i & n1)
printf("1 ");
else
printf("0 ");
printf("\n");
printf("%d : ", n2);
for(i=128; i > 0; i = i/2)
if(i & n2)
printf("1 ");
else
printf("0 ");
printf("\n");
n3 = n1 & n2;
printf("%d & %d : ", n1, n2);
for(i = 128; i > 0; i = i/2)
if(i & n3)
printf("1 ");
else
printf("0 ");
printf("\n");
n3 = n1 | n2;
printf("%d | %d : ", n1, n2);
for(i = 128; i > 0; i = i/2)
if(i & n3)
printf("1 ");
else
printf("0 ");
printf("\n");
printf("~%d : ", n1);
n3 = ~n1;
for(i = 128; i > 0; i = i/2)
if(i & n3)
printf("1 ");
else
printf("0 ");
printf("\n");
printf("%d ^ %d : ", n1, n2);
n3 = n1 ^ n2;
for(i = 128; i > 0; i = i/2)
if(i&n3)
printf("1 ");
else
printf("0 ");
printf("\n\n");
n1 <<= 2; // n1=n1<<2;
printf("%d << 2: ", n1);
for(i = 128; i > 0; i = i/2)
if(i & n1)
printf("1 ");
else
printf("0 ");
printf("\n");
n2 >>= 1;
printf("%d >> 1: ", n2);
for(i = 128; i > 0; i >>=1) //i=i/2)
if(i & n2)
printf("1 ");
else
printf("0 ");
printf("\n");
return 0;
}
9 : 0 0 0 0 1 0 0 1 |
활용 : 비교할 비트를 마지막으로 보내어 타겟
for( i = 7; i >= 0; i--) |
시프트 이동 연산자
특징
- 속도를 요하는 프로그램에서 유용
- 여러번의 산술연산보다 한번의 비트 이동이 속도면에서 효율적
<< : left shift 연산자
- 변수의 모든 비트를 왼쪽으로 integer-bits만큼 이동하고 오른쪽은 0으로 채움
- 수에 2를 곱한 것과 동일
>> : right shift 연산자
- 변수의 모든 비트를 오른쪽으로 integer-bits만큼 이동하고 왼쪽은 0으로 채움(음수는 1)
- 수에 2를 나눈 것과 같음
활용 : 시프트 이동 연산자를 이용하여 여러 바이트를 하나의 값으로 연결
#include <stdio.h>
int main()
{
char x = 'A', y = 'B';
short int z = 0x6162;
long int N = 0;
// 원하는 내용만 추출할 수 있어 61(a) / 62(b)
printf("%c %c %c %c \n", x, y, (char)(z>>8), (char)z);
// 흩어져있는 내용 모을 수 있어~ (AB6162)
N = x;
N = N << 24;
N += (long int) y << 16;
N += z;
printf("%x \n", N);
return 0;
}
A B a b |
더 많은 시리즈 보기
[고급 C++]C컴파일러와 C라이브러리(공유/정적/동적라이브러리)
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터)
[고급 C++]포인터 3편(배열 포인터/포인터 배열/문자열 상수 포인터)
[고급 C++]포인터 4편(다중 포인터/함수 포인터/void형 포인터)
궁금한 사항은 댓글로 남겨주세요💃💨💫
좋아요와 구독(로그인X)은 힘이 됩니다 🙈🙉
'컴퓨터공학과 > Programming' 카테고리의 다른 글
[C언어] 특정 문자로 문자열 자르기 - Split 구현 (1) | 2023.02.25 |
---|---|
[고급 C++] 매크로함수 (0) | 2020.11.02 |
[고급 C++] 공용체와 구조체 비트필드 + 바이트 오더링 / 활용방안 (1) | 2020.11.02 |
[고급 C++] 구조체와 구조체포인터 (0) | 2020.10.27 |
[고급 C++] 가변인자 / CERT C (feat. 안전 코딩하기) (1) | 2020.10.26 |