티스토리 뷰
반응형
개발자의 C언어 독학 기초 # 응용편 2의보수 (bit연산)구하기
모든 강의 자료 : www.codingnow.co.kr/
이번강의는 2의 보수를 구하는 방법에 대해 bit연산을 사용한 예제를 구현한다.
2의 보수는 음수를 표현하기 위해 사용되는 것이다.
솔직히 20년 실무에서 보수를 구해 본적은 없다 ㅋ
컴파일러가 알아서 한다.
즉 개념정도를 머리에 담아 두면된다.
8bit 변수의 경우 최대 8bit 정수 255까지 표현되지만 음수를 표현하기 위해 상의 bit를 부호 비트를 사용하는 경우 255의 절반인 127까지 표현이 가능하다.
아래 코드를 이해하기 위해 비트 연산을 어느 정도 이해할 필요가 있다.
아래와 같이 (input&0xFF) 하게되면 만약 input 변수가 0x2222일때 0x0022가 된다.
&연산으로 인해 나머지는 버려지게 된다.
target = (input&0xFF); //8bit를 제외한 나머지 값은 버린다.
아래는 쉬프트 연산이다.
계산된 값을 1비트씩 보여주기 위해 8비트의 최상위 1비트씩 보여주기 위해 7, 6, 5, 4, 3, 2, 1 씩 쉬프트 하고 &0x01 연산으로 인해 나머지는 0으로 된다.
for(int i=7; i>-1; i--)
{
printf(" %d", ((target>>i)&0x01));
}
아래 코드는 전체 코드이다.
실력자가 되는 조건중에 한가지 이해 될때까지 분석하는 것이다.
보다보면 보인다.^^
이 코드 분석하는데 하루가 꼬박 걸린다 해도 이 산을 넘으면 이보다 낮은 산은 낮게 보이는 법!!
#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
int input;
printf("보수를 구합니다.\n 1부터 ~ 127까지의 수를 입력하세요. : ");
scanf("%d",&input);
byte target; //8bit의 수로 전환
target = (input&0xFF); //8bit를 제외한 나머지 값은 버린다.
printf("\n (16진수) 2진수로 표현합니다.\n");
printf("\n 입력된 값 : (0x%02X) ",(target));
for(int i=7; i>-1; i--)
{
printf(" %d", ((target>>i)&0x01));
}
target = (~target); //1의 보수
printf("\n1의보수 값 : (0x%02X) ",(target));
for(int i=7; i>-1; i--)
{
printf(" %d", ((target>>i)&0x01));
}
target = (target+1); //2의 보수
printf("\n2의보수 값 : (0x%02X) ",(target));
for(int i=7; i>-1; i--)
{
printf(" %d", ((target>>i)&0x01));
}
printf("\n\n");
return;
}
반응형
'C언어 강의' 카테고리의 다른 글
개발자의 C언어 독학 기초 # scanf (0) | 2020.04.16 |
---|---|
개발자의 C언어 독학 기초 # gets, puts (0) | 2020.04.16 |
개발자의 C언어 독학 기초 # 응용 / 2진탐색 (0) | 2020.04.14 |
개발자의 C언어 독학 기초 # 기본 연산 (0) | 2020.04.14 |
개발자의 C언어 독학 기초 # 응용 / 퀵정렬 (0) | 2020.04.14 |