Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- MFC 예제
- 정처기 독학
- 도움말
- 실습
- MFC
- MyThread
- C언어
- C++
- 충무창업큐브
- 유료강좌
- Tipsware
- visual
- ListBox
- 마이크로소프트
- MyTread
- tips강좌
- do it c
- 포트폴리오
- 정보처리기사
- win32
- mfc 실습
- 김성엽
- Time
- 미가공
- C
- 별찍기
- 핵심 요약
- SSG
- mysql
- linux
Archives
- Today
- Total
History
시프트 연산자와 비트연산자 실습 본문
728x90
반응형
지금까지 개념을 설명하면서 쌓아온 실력을 실습해보는 시간이다. 아래 코드는 자신이 원하는 비트 번지를 0으로 바꿀 수 있는 함수이다.
unsigned char ResetBit(unsigned char dest_data,unsigned char bit_num) //자신이 원하는 비트 번지를 바꾸는 함수
{
if (bit_num <8){
dest_data = dest_data & ~(0x01 << bit_num);
}
return dest_data;
}
int main()
{
unsigned char lamp_state = 0x7F; //16진수의 숫자
printf("%X->",lamp_state);
lamp_state = ResetBit(lamp_state, 3); //3번째 비트를 0으로 바꾸겠다.
printf("%X\n", lamp_state); //3번째 비트가 0으로 바뀐 결과 값 도출
}
위의 코드만 보면 함수 부분이 헷갈릴 것이다. 어떻게 진행되는지 아래 부연설명을 진행하겠다.
0x01 << bit_num -> 0000 1000
~(0x01 << bit_num) -> 1111 0111
dest_data & ~(0x01 << bit_num)
1111 0111
& 0111 1111
-----------
0111 0111 ->77
두 번째 예제이다. 이번 예제는 자신이 원하는 비트 번지를 1로 세팅하는 코드를 작성해 보겠다.
unsigned char SetBit(unsigned char dest_data, unsigned char bit_num)
{
if (bit_num < 8) {
dest_data = dest_data |(0x01 << bit_num); //원하는 비트번지를 1로 바꿈
}
return dest_data;
}
int main()
{
unsigned char data = 0x77;
printf("%X->", data);
data = SetBit(data, 3);
printf("%X\n", data);
}
아래는 함수의 부연 설명이다.
0x01 << bit_num -> 0000 1000
dest_data |(0x01 << bit_num)
0000 1000
|0111 0111
----------------
0111 1111 ->7F
마지막 예제이다. 이 예제는 어떠한 16진수를 2진법으로 바꾸는 함수이다.
unsigned char GetBit(unsigned char dest_data, unsigned char bit_num)
{
unsigned char bit_state = 0;
if (bit_num < 8) {
bit_state = dest_data & (0x01 << bit_num);
bit_state = bit_state >> bit_num;
}
return bit_state;
}
int main()
{
unsigned char data = 0x75;
unsigned char bit_state;
int i;
printf("%X->", data);
for ( i = 0; i < 8; i++){ //전체 비트를 바꾸기 위해 반복문 8번을 돌린다.
bit_state = GetBit(data, 7 -i); //최종 비트는 7이므로
printf("%d", bit_state);
}
printf("\n");
}
아래는 함수의 부연설명이다.
0111 0011 ==0x75
0000 0001 << 7
1000 0000
&0111 0101
----------------
0000 0000 -->0
0000 0001 << 6
0100 0000
&0111 0101
----------------
0100 0000 -->1
0000 0001 << 5
0010 0000
&0111 0101
----------------
0010 0000 -->1
0000 0001 << 4
0001 0000
&0111 0101
----------------
0001 0000 -->1
0000 0001 << 3
0000 1000
&0111 0101
----------------
0000 0000 -->0
0000 0001 << 2
0000 0100
&0111 0101
----------------
0000 0000 -->1
0000 0001 << 1
0000 0010
&0111 0101
----------------
0000 0010 -->0
0000 0001 << 0
0000 0001
&0111 0101
----------------
0000 0001 -->1
728x90
반응형
'C,C++ > 개념 실습 프로그래밍' 카테고리의 다른 글
[C언어] strcmp 함수(문자열 비교)에 대하여 (0) | 2023.01.14 |
---|---|
[C언어][Q&A] fread의 반복횟수에 대하여 (0) | 2023.01.14 |
시프트 연산자와 비트연산자 step_3 (0) | 2022.11.19 |
시프트 연산자와 비트연산자 step_2 (0) | 2022.11.19 |
시프트 연산자와 비트연산자 step_1 (1) | 2022.11.19 |