본문 바로가기

소프트웨어/C언어

C언어를 독파하자 - 데이터표현방식의 이해


윤성우 열혈강의 독파하자!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
연습문제만 풀면서 GO~~~~~~~~~

문제1] 10진수 8부터 20까지를 2진수와 16진수로 표현해보자

[08] =   2진수 1000  16진수 0x08
[09] =   2진수 1001  16진수 0x09
[10] =   2진수 1010  16진수 0x0A
[11] =   2진수 1011  16진수 0x0B
[12] =   2진수 1100  16진수 0x0C
[13] =   2진수 1101  16진수 0x0D
[14] =   2진수 1110  16진수 0x0E
[15] =   2진수 1111  16진수 0x0F
[16] =   2진수 10000  16진수 0x10
[17] =   2진수 10001  16진수 0x20
[18] =   2진수 10010  16진수 0x30
[19] =   2진수 10011  16진수 0x40
[20] =   2진수 10100  16진수 0x50


문제2] 10진수 5부터 18까지를 8진수로도 표현해 보자. 8진수에 대해서는 언급하지 않았지만 기본 단위숫자가 0부터 7까지 8개라는 특징만 이해하면 충분히 해결할 수 있다. 이 문제는 여러분이 진법에 대한 기본적인 원리를 이해했는지를 묻고 있는것이다.


[05] = 5
[06] = 6
[07] = 7
[08] = 10
[09] = 11
[10] = 12
[11] = 13
[12] = 14
[13] = 15
[14] = 16
[15] = 17
[16] = 20
[17] = 21
[18] = 22

문제3] 입력받은 음의 정수 값을 양의 정수 값으로 바꿔서 출력하는 프로그램을 작성해라. 만약에 -3이 입력되면 3이 출력이 되어야하고, -100이 입력이 되면 100이 출력이 되어야 한다. 단! 반드시 비트단위 연산자를 사용해서 구현해야 하며, 양의 정수 값은 입력되지 않는다고 가정하자.




#include 

int main(void)
{
 int a;
 scanf("%d",&a);
 a=~a+1;
 printf("%d.\n",a);

}


}

 결과

 



문제4]
 사용자로부터 입력받은 값의 두 배를 계산해서 출력해 주는 프로그램을 곱셈연산이 아닌 비트 쉬프트 연산을 이용해서 구현해보자. 또한 입력 값은 (-1073741825)보다 크고 (1073741824)보다 작다고 가정하자!!   참고로 int형 데이터를 2바이트로 인식하는 환경에서 이 문제를 해결할 경우에는 입력 값의 최대, 최소 범위가 위에서 언급한 범위의 반이라고 생각하기 바란다.



#include 

int main(void)
{
 int a;
 scanf("%d",&a);
 a=a<<1;
 printf("%d.\n",a);

}


}

 결과