일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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언어
- 클래스 다이어그램
- 실습으로 다지는 c#
- Windows Forms
- 네트워크 프로그래밍
- 표준 라이브러리 함수
- 실습
- 언제나휴일
- 강의
- 졸업 작품
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
비트 자리 이동 연산, 쉬프트 연산 본문
안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 비트 자리 이동 연산, 쉬프트 연산을 알아볼게요.
1. 왼쪽 쉬프트 <<
2. 오른쪽 쉬프트 >>
1. 왼쪽 쉬프트 <<
왼쪽 쉬프트 연산은 1자리를 이동할 때 2로 곱한 결과와 같습니다.
다음의 소스 코드는 부호 없는 정수 3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.
그리고 부호 있는 정수 -3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.
#include
int main()
{
unsigned u1 = 3, u2;
u2 = u1 << 4;//shl
printf("16진수: %X %X\n", u1, u2);
printf("10진수: %d %d\n", u1, u2);
int i1 = -3, i2;
i2 = i1 << 4;//shl
printf("16진수: %X %X\n", i1,i2);
printf("10진수: %d %d\n", i1, i2);
return 0;
}
실행 결과는 다음과 같습니다.
16진수: 3 30
10진수: 3 48
16진수: FFFFFFFD FFFFFFD0
10진수: -3 -48
결과를 보면 부호 없는 정수는 원래 값 3에 2의 4승인 16을 곱한 48임을 알 수 있습니다.
결과를 보면 부호 있는 정수는 원래 값 3에 2의 4승인 16을 곱한 48임을 알 수 있습니다.
이를 통해 왼쪽 쉬프트 연산으로 n비트 자리 이동하면 2의 n승을 곱한 결과를 갖는 것을 알 수 있습니다.
참고로 왼쪽 쉬프트 연산은 빈 자리를 0으로 채우는 논리 쉬프트 연산입니다.
2. 오른쪽 쉬프트 >>
오른쪽 쉬프트 연산은 1자리를 이동할 때 2로 나눈 결과와 같습니다.
다음의 소스 코드는 부호 없는 정수 48을 4자리 오른쪽으로 자리 이동 시키는 소스 코드입니다.
그리고 부호 있는 정수 -48을 4자리 오른쪽으로 자리 이동 시키는 소스 코드입니다.
#include
int main()
{
unsigned u1 = 48, u2;
u2 = u1 >> 4;//shr
printf("16진수: %X %X\n", u1, u2);
printf("10진수: %d %d\n", u1, u2);
int i1 = -48, i2;
i2 = i1 >> 4;//sar
printf("16진수: %X %X\n", i1, i2);
printf("10진수: %d %d\n", i1, i2);
return 0;
}
실행 결과는 다음과 같습니다.
16진수: 30 3
10진수: 48 3
16진수: FFFFFFD0 FFFFFFFD
10진수: -48 -3
결과를 보면 부호 없는 정수는 원래 값 48에 2의 4승인 16을 나눈 3임을 알 수 있습니다.
결과를 보면 부호 있는 정수는 원래 값 -48에 2의 4승인 16을 나눈 -3임을 알 수 있습니다.
이를 통해 왼쪽 쉬프트 연산으로 n비트 자리 이동하면 2의 n승을 곱한 결과를 갖는 것을 알 수 있습니다.
참고로 부호 없는 정수의 오른쪽 쉬프트 연산은 논리 쉬프트 연산입니다. (왼쪽 쉬프트와 같습니다.)
부호 있는 정수의 오른쪽 쉬프트 연산은 산술 쉬프트 연산입니다.
산술 쉬프트 연산은 빈 자리를 부호 비트로 채우는 쉬프트 연산입니다.
언제나휴일 추천 여행 및 산책
'C & C++ > 언제나 C언어' 카테고리의 다른 글
값에 따라 수행할 구문을 선택하는 switch case 문 (0) | 2025.01.03 |
---|---|
조건문 문제 솔루션 (0) | 2025.01.03 |
조건문에서 if는 참일 때 수행 하고 else는 거짓일 때 수행 (0) | 2025.01.03 |
대입 연산의 왼쪽(좌항)에 오는 표현을 l-value라고 불러요. (0) | 2025.01.03 |
xor mask를 이용한 암호화, and mask를 이용한 이진수 출력 (0) | 2025.01.03 |
비트 연산 & | ^ ~ (0) | 2025.01.03 |
비교 연산, 논리 연산의 도움을 받으세요. (1) | 2025.01.03 |
논리 형식과 논리 연산 (0) | 2025.01.03 |