패킷량의 Bytes누적값을 KB로 표시하려 할 때, 1000으로 나누시나요?
글쓴이: wfellow / 작성시간: 화, 2006/01/10 - 3:29오후
통계자료의 작성을 위해 단위를 낮추려고(Bytes->KBytes) 비트연산을 하다가 문득 아래와 같은 의문이 들었습니다.
예를 들어서, 850, 270, 56, 255,... 이것들의 합을 K단위로 표시 하고 소숫점 세자리 까지 나타낼 때 1000으로 나누어서 1.431 KB로 표현할지 아니면 1024로 나누어서 1.397 KB로 표현을 해야 하는지 아리까리 합니다. 지금까지는 별 생각없이 "K(Kilo)는 10진법에서 1000단위 표시니까 1000으로 나누자" 였었습니다.
ps: 이 글을 쓰다보니, 기존에 당연하다 여겼던 것들도 전부 다시 검증을 하고픈 생각이 살짝 듭니다.
Forums:
1024가 맞을텐데요.
1024가 맞을텐데요.
[quote="Anonymous"]1024가 맞을텐데요.[/quote]
그렇담 1024로 나눈 KB값을 누적했을 때, 또 MB로 표현해야 한다면 또 1024로 나누어야 하나여?
-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----
솔리드 스테이트 메모리라면 2^10 으로 계산하시고 하드디스크면 10^3
솔리드 스테이트 메모리라면 2^10 으로 계산하시고 하드디스크면 10^3으로 단위를 나누시면 됩니다. 하드디스크의 경우에 10진 베이스인건 용량을 조금이라도 크게 보이게 하기 위한 하드디스크 제조업체들의 마케팅 관행이 정착해서입니다.
네트웍 밴드위쓰라면 글쎄요... 이더넷의 경우 10Mbps, 1000Mbps, 1Gbps, 10Gbps 이렇게 나가는건 10배씩 올라가는 10진수인데, 보통 패킷들은 메모리 버퍼에서 처리되므로 나눌때는 2^10으로 하는게 관행인 것 같습니다.
you must know the power of dark side.
정확한 명기법을 사용하시면 됩니다.
KiB = 1024 B
KB = 1000 B
입니다. 리눅스도 최근에는 ifconfig -a 해보시면 알겠지만, TX, RX 바이트에 KiB, MiB, GiB 를 사용하고 있습니다.
이는 1998년에 IEC(International Electrotechnical Commission)에서 10진수와 2진수에 근거한 prefix에 대한 표기법을 승인했습니다.
원래 우리가 말하는 기가(giga), 메가(mega)와 같은 접두사를 붙여서 말할때와 실제로 의미와의 갭때문에 많은 혼란이 있었고, 따라서 두개의 표기를 분리해서 말하도록 하였습니다. 따라서 정확한 명칭에서는 1MB = 1,000,000 B 가 맞습니다. 기존의 2^20 B 인 보통 우리가 말하는 1MB(1024*1024 B)는 1MiB라고 표기하는게 맞고, 이 경우에는 1,048,576B가 되죠. 참조하실 웹페이지는 nist에 나와있으니 이 URL을 참조합니다.
Prefixes for binary multiples : http://physics.nist.gov/cuu/Units/binary.html
PS) 예전에 네이버 지식인에서 좀 황당한 답변이라서 이의제기 햇던 내용을 고대로 옮겨왔습니다. 당시에는 하드디스크 업체가 용량 크게 보일려는 상술이라는 등의 답변들이 있어서 달아놨었는데, 비슷한 내용이 나와서 다시 복사해다 붙였습니다.
생각외로 네이버 지식인에는 황당 답변이 많더군요.
네이버에 달은 답변들을 구경하실려면 아래 링크로 가세요.
http://kin.naver.com/db/detail.php?d1id=1&dir_id=104&eid=zMlFq2pip+sTSVlA+GWpEmLEv0Ck1+qX
========================================
* The truth will set you free.
명확한 답변들에 감사드립니다.^^
명확한 답변들에 감사드립니다.^^
-----[꼬릿말 절취선 시작]-----
삽질전에 먼저 구글신께 기도하자.
-----[꼬릿말 절취선 끝]-----
[quote="wfellow"][quote="Anonymous"]1024
윗분이 MiB와 MB의 차이를 잘 말씀해주셔서 그 차이를 저도 알았네요.
아무튼, 가지고 오시는 데이타 크기에 대한 단위가 단순히 Byte 수이고, 1024(KiB)단위를 쓰고자 하신다면 1024로 주욱 나누어주면 될 것이고, 그냥 KB단위라면 1000으로 계속 나누어주면 되겠네요.
방금 확인해보니, ls같은 프로그램에서 "ls -alh"로 명령을 내릴때 나오는 6.5K같은 값들은 모두 1024로 나누어진 값이네요. (1000으로 나누면 6.7이 되는군요) 1024로 나누는게 관습적인듯.
sunyzero님이 많은 말씀을 해주셨네요.조금 덧붙이겠습니다.
sunyzero님이 많은 말씀을 해주셨네요.
조금 덧붙이겠습니다.
Kilo --> k 이고 K -> Kelvin (절대온도) 이므로 KB 가 아니라 kB 가 1000B 입니다.
Ki, Mi 는 각각 kibi, mebi 의 약자이며, 다음과 같습니다.
Ki -> kibi -> 2^10, k -> kilo -> 10^3
Mi -> mebi -> 2^20, M -> mega -> 10^6
Gi -> gibi -> 2^30, G -> giga -> 10^9
Ti -> tebi -> 2^40, T -> tera -> 10^12
Pi -> pebi -> 2^50, P -> peta -> 10^15
Ei -> exbi -> 2^60, E -> exa -> 10^18
Zi -> zebi -> 2^70, Z -> zetta -> 10^21
Yi -> yobi -> 2^80, Y -> yotta -> 10^24
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
여담이지만..
여담이지만, 일반적으로 과학기술 단위계에선 10진수로 kilo, mega, giga 등이 정해져있지요.
하지만, 컴퓨터는 2진수가 메모리의 기본단위이므로 계산상의 편의를 위해서 1000~=1024 라고 근사하는겁니다.
실제로 그 나눗셈도 비트와이즈 쉬프트로 해결되잖아요.
만일 unsigned int 이면 진짜 나눗셈 계산(x/1024)을 하지 않고 그냥 쉬프트(x>> 10) 만 해도 되겠죠?
씨피유에서 보면 엄청난 연산의 절약이죠.
vio:
댓글 달기