본문 바로가기
Etc./C

[C] 데이터 처리

by ahj 2021. 9. 21.

https://codeup.kr/problem.php?id=1085 

 

[기초-종합] 소리 파일 저장용량 계산하기(설명)

소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다. 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크해 그 값을 정수값으로 바꾸고, 그 값을 저장해 소리를

codeup.kr

저장용량 계산하기에서 지난번 파이썬 풀때도 그렇고 이번에도 당황했는데

h, b, c, s를 모두 int로 지정해주고 바로 그냥 나눠주고 float으로 넘겨버렸는데

이상하게 정수부분만 살리고 소수점 이하는 모두 버려버리는 사태가 발생했다.

왜 그럴까 몇번을 더 넣어보고 시도해봤는데 이유를 몰랐는데

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qbxlvnf11&logNo=220991286213

 

(C/C++)자료형의 변환(Casting)

char형으로 표현되어 있는 데이터의 표현방식을 int형으로 바꾸거나, int형으로 표현되어 있는 데이터의 표...

blog.naver.com

https://myblog.opendocs.co.kr/archives/1230

 

[C++ 정리] 자료형의 크기 및 범위 | Opendocs

__int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

myblog.opendocs.co.kr

블로그들을 통해 공부해보니 정수끼리 곱해줘서 나온 int 정수형 값의 경우에는 float으로 넘어가봤자 .0으로 넘어가는 것 같다. 어차피 정수형은 실수형으로 넘겨봤자 소수점 이하를 버리고 넘겨주는 듯?하다.

원인을 알고보니 곱해준 값을 MB 단위로 바꿔줄 떄 나누기 값을 미리 곱해서 즉,

/1024/1024/8 이렇게 나눠준 것이 아니라 /(1024*1024*8)로 나눠줘 버려서 최종적으로 나눠주는 값이 그냥 정수형이어버려가지고 소수점을 버려버린 듯 하다.

 

덕분에 여러 블로그를 왔다갔다 하면서 데이터 값을 공부한 것 같다.

https://dojang.io/mod/page/view.php?id=493 

 

C 언어 코딩 도장: 58.1 기본 자료형 변환하기

58 자료형 변환하기 C 언어에서는 자료형이 같거나 크기가 큰 쪽, 표현 범위가 넓은 쪽으로 저장하면 자동으로 변환이 됩니다. int num1 = 10; unsigned int num2 = num1; // int와 unsigned int는 자료형이 같음 lo

dojang.io

덕분에 long, double등의 자료형들이 어떻게 사용되는가 알게 된 것 같다.

 

앞으로 데이터 처리할 때 어떻게 처리가 될 것인지 잘 따져보면서 코딩하도록 하자.

'Etc. > C' 카테고리의 다른 글

[C] 포인터, 배열, 동적메모리할당  (0) 2021.10.09
[C] 문자열 공백/띄어쓰기 입력  (0) 2021.09.26
[C] 삼항연산자  (0) 2021.09.21
[C/C++] 포인터  (0) 2021.09.19

댓글