오늘 어디어디 수업을 들으면서 강사님에게 한 가지 과제를 받았다.
숫자가 있으면 원하는 위치의 비트를 0으로 만들라는 코드를 짜라고 하셨는데 그 전에 거의 정답에 이론을 설명해 주셨는데 나는 까먹고 기억이 안나서 그냥 내가 생각한 방식으로 만들기로 했다.
먼저 이론적인 방법은 특정 비트를 만들어 바꾸려는 비트와 and 연산을 하면 간단하게 해결이 가능했다
010101 에서 뒤에서 3번째 값을 0으로 바꾸고 싶다면 따로 1로 채운값에 3번째 위치에 0으로 만들고 and를 하면 된다
예시로 111011 이라는 값을 따로 만들어서 and 연산을 하면
1 1 1 0 1 1 - 임의로 만든 비트
0 1 0 1 0 1 - 바꾸려는 bit(AND 연산)
0 1 0 0 0 1 - 결과 값
그럼 반대로 특정 값을 1로 바꾸는 방법은
내가 바꾸려는 위치의 비트를 1로 바꿔 OR 연산을 하면 된다
0 0 0 1 0 0 - 임의로 만든 비트
0 1 0 0 0 1 - 바꾸려는 bit (OR 연산)
0 1 0 1 0 1 - 결과 값
그리고 이걸 코드로 구현하면
#include "stdio.h"
int change_bit_zero(int bit, int position) {
int set_bit = ~(1<<position);
return set_bit & bit;
}
int change_bit_one(int bit, int position) {
int set_bit = (1 << position);
return set_bit | bit;
}
int main()
{
//position 위치는 0부터 시작합니다.
int input, position;
printf("input: ");
scanf_s("%d", &input);
printf("position: ");
scanf_s("%d", &position);
printf("change_bit_zero: %d\n", change_bit_zero(input, position));
printf("change_bit_one: %d", change_bit_one(input, position));
return 0;
}'C언어 강의' 카테고리의 다른 글
| [NOOBHACK] C언어로 레지스터 값 추가 방법(RegOpenKeyEx, RegSetValueEx) (0) | 2022.08.29 |
|---|