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

PersesTitan·2023년 4월 5일
0

C

목록 보기
6/9
post-custom-banner

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
10.00000010
20.100000101
30.11000010011
40.1110001000111
50.111100100001111

단점

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

    예시)
    입력:155
    => 10011011
    입력: 1555
    => 133732862

  2. t값float으로 정의하면 일부 소수점이 x.9999...와 같이 저장되어 정수로 변환하였을때 값이 다르게 나올때가 있다.

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

profile
안녕하세요 페르세스 티탄입니다! 부족한 부분이 많이 있겠지만 잘부탁드립니다.
post-custom-banner

0개의 댓글