Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- error
- Python
- maven
- kotlin
- react
- plugin
- GitHub
- Godot
- rubymine
- Baekjoon
- OTLanguage
- Android
- CPP
- gnuplot
- C
- RaspberryPi
- 루비
- boj
- OAuth
- Vane
- jetbrains
- 개발노트
- ruby
- Java
- Shell
- Spring
- JS
- IntelliJ
- gradle
- ruby2d
Archives
- Today
- Total
PersesTitan(페르) 기술블로그
[C] 10진수 2진수로 변환 (특이하게 변환해보기) 본문
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 |
단점
숫자가 커지면
10의 x승
을 저장하는i
가 오버플로우 하면서 값이 이상하게 나오는 현상이 존재합니다.
(사실 반복문을 1번 더 쓴뒤에 t에 10을 계속 곱해도 되지만 반목문 1번만 써서 2진수로 변환하고 싶었던게 목적이라서 이렇게 해결하지는 않았습니다.)예시) 입력:155 => 10011011 입력: 1555 => 133732862
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 |