PersesTitan(페르) 기술블로그

[C] 10진수 2진수로 변환 (특이하게 변환해보기) 본문

Language/C

[C] 10진수 2진수로 변환 (특이하게 변환해보기)

PersesTitan(페르) 2023. 4. 5. 13:59

10진수를 2진수로 바꾸는 방법은 여러가지가 있지만 특이한 방법으로 변환을 해보고 싶어져서 작성하게 되었습니다.

코드

#include <stdio.h>

int main() {
    int count, i = 1;
    double t;
    scanf("%d", &count);
    for (t=0;count>0;count/=2,i*=10,t/=10.0) t+=count%2;
    printf("%d", (int) (t*i));
    return 0;
}

설명

count는 2진수로 변환할 10진수를 저장하고 i는 소수로 저장된 총합을 정수로 변환해줄 값을 저장합니다.
값을 넣은뒤에 10을 나누어 값을 소수점에 저장한뒤에 마지막에 자리수만큼 10의 거듭제곱을 곱하여서 결과를 구하게 구현하였습니다.

(예시값 : 15)

순서 t의 값 i의 값 t * i
1 0.000000 1 0
2 0.100000 10 1
3 0.110000 100 11
4 0.111000 1000 111
5 0.111100 10000 1111

단점

  1. 숫자가 커지면 10의 x승을 저장하는 i가 오버플로우 하면서 값이 이상하게 나오는 현상이 존재합니다.
    (사실 반복문을 1번 더 쓴뒤에 t에 10을 계속 곱해도 되지만 반목문 1번만 써서 2진수로 변환하고 싶었던게 목적이라서 이렇게 해결하지는 않았습니다.)

    예시)
    입력:155
     => 10011011
    입력: 1555
     => 133732862
  2. t값float으로 정의하면 일부 소수점이 x.9999...와 같이 저장되어 정수로 변환하였을때 값이 다르게 나올때가 있다.

    double을 float으로 바꾼 예시)
    입력:13
     => 1100.9998781100  // (int로 변환하기 전)
     => 1100

'Language > C' 카테고리의 다른 글

[C] c언어 난수 생성 구현 (rand(), random())  (0) 2023.06.17
[C] 포맷 (format) 종류 정리  (0) 2023.06.16
[C] C언어에서 배열 길이 구하기 (sizeof)  (0) 2023.04.05
[C++] 출력하기  (0) 2023.03.09
[C][C++] GCC 다운로드 하기  (0) 2023.03.04