일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 언제나 휴일
- 실습
- C++
- 소켓 통신
- c언어
- 충남 천안
- c#
- Windows Forms
- 클래스 다이어그램
- 산책하기 좋은 곳
- 알고리즘
- 프로젝트
- 무료 동영상 강의
- 원격 제어 프로그램
- 동영상 강의
- 유튜브 동영상 강의
- 추천
- 졸업 작품
- 캡슐화
- 동영상
- 안드로이드 앱 개발
- 소스 코드
- 표준 입출력
- 졸업 작품 소재
- 실습으로 다지는 c#
- 파이썬
- 네트워크 프로그래밍
- 강의
- 표준 라이브러리 함수
- 언제나휴일
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
비트 연산 & | ^ ~ 본문
안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 비트 연산입니다.
비트 연산은 같은 자리의 비트끼리 논리 연산을 수행합니다.
그리고 C언어의 비트 연산의 피 연산자는 정수 형식이예요.
1. 비트 연산 & | ^ ~
2. 비트 and mask
1. 비트 연산 & | ^ ~
예를 들어 정수 6과 5의 비트 연산을 알아봅시다.
정수 6은 이진수로 0000 0000 0000 0110이고 5는 0000 0000 0000 0101 입니다.
만약 비트&(and)를 수행하면 다음 그림처럼 끝에서 세 번째 자리만 모두 1입니다.
이진수로 0000 0000 0000 0100입니다.
따라서 6&5의 결과는 4입니다.
만약 비트|(or)를 수행하면 다음 그림처럼 끝에서 세 자리는 둘 중 하나는 1입니다.
이진수로 0000 0000 0000 0111입니다.
따라서 6|5의 결과는 7입니다.
만약 비트^(xor, 서로 다르면1, 같으면 0)를 수행하면 다음 그림처럼 서로 다른 곳은 끝에서 두 번째와 처 번째 자리입니다.
이진수로 0000 0000 0000 0011입니다.
따라서 6^5의 결과는 3입니다.
비트 ~(not) 연산은 1인 자리는 0, 0인 자리는 1로 바꾸는 것을 말합니다.
예를 들어 16진수 0x11FF0000 의 부정을 예로 들게요.
이진수로 0001 0001 1111 1111 0000 0000 0000 0000 입니다.
부정은 1110 1110 0000 0000 1111 1111 1111 1111 이죠.
16진수로 0xEE00FFFF 입니다.
/* https://ehpub.co.kr 언제나 C언어 비트 연산
*/
#include
int main()
{
int i = 0x11FF0000;
printf("6&5:%d\n", 6 & 5);
printf("6|5:%d\n", 6 | 5);
printf("6^5:%d\n", 6 ^ 5);
printf("%#X\n", ~i);
return 0;
}
실행 결과는 다음과 같습니다.
6&5:4
6|5:7
6^5:3
0xEE00FFFF
2. 비트 and mask
전산에서 데이터를 특정 키로 비트 연산을 수행하는 것을 비트 마스크라고 부릅니다.
마스킹하는 것이죠.
비트 & 마스크는 원하는 자리의 값을 추출할 때 자주 사용합니다.
다음은 0xFFFF0000으로 하위 2바이트 값을 0으로 clear시키고 상위 2바이트 값만 가져오는 예입니다.
그리고 0x0000FFFF로 상위 2바이트 값을 0으로 clear시키고 하위 2바이트 값만 가져오는 예입니다.
/* https://ehpub.co.kr 언제나 C언어 비트 and mask
*/
#include
int main()
{
int a = 0x12345678;
int b = 0xFFFF0000;
int c = 0x0000FFFF;
printf("%#x\n", a & b);
printf("%#x\n", a & c);
return 0;
}
실행 결과는 다음과 같습니다.
0x12340000
0x5678
비트 and mask는 IP 주소 중에 네트워크 주소를 추출하거나 호스트 주소를 추출할 때도 사용합니다.
언제나휴일 추천 여행 및 산책
'C & C++ > 언제나 C언어' 카테고리의 다른 글
조건문에서 if는 참일 때 수행 하고 else는 거짓일 때 수행 (0) | 2025.01.03 |
---|---|
대입 연산의 왼쪽(좌항)에 오는 표현을 l-value라고 불러요. (0) | 2025.01.03 |
비트 자리 이동 연산, 쉬프트 연산 (0) | 2025.01.03 |
xor mask를 이용한 암호화, and mask를 이용한 이진수 출력 (0) | 2025.01.03 |
비교 연산, 논리 연산의 도움을 받으세요. (1) | 2025.01.03 |
논리 형식과 논리 연산 (0) | 2025.01.03 |
이럴 때 나머지 연산을 사용하자. 0123401234012… (0) | 2025.01.03 |
산술 연산과 overflow (0) | 2025.01.03 |