long을 사용하는 이유가 궁금합니다.
책을 보면 long을 쓰는건 double이건 int 건 자료형의 크기가 같은데
왜 굳이 long을 쓰는지 모르겠습니다.
심지어 long double은 변수뒤에 l까지붙이는데 long을 쓰는 이유가 무엇인가요? long double만 아니면 short와 구별하려고 그냥 long으로 표기한다고 생각하겠는데 잘모르겠습니다.
C 언어는 역사적으로 매우 오래된 언어입니다.
따라서 당시의 역사적인 배경을 이해해야 할 필요가 있습니다.
C 언어가 처음 쓰였던, UNIX를 개발할 때 쓰였던 하드웨어는 PDP-7입니다.
PDP-1은 18비트 머신이었습니다. 현대 컴퓨터에서 8, 16, 32, 64비트로 정해진 것도 그렇게 오래된 것은 아닙니다. 이제는 오래되었지만.
18비트 컴퓨터
https://en.wikipedia.org/wiki/18-bit
CPU에서 한 번에 처리할 수 있는 정보의 단위를 워드(WORD)라고 합니다.
https://ko.wikipedia.org/wiki/%EC%9B%8C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
보통 int는 워드 사이즈에 맞춰져 있습니다.
지금은 흔하지 않지만, 10, 12, 18, 16, 36비트 컴퓨터들이 있었습니다.
현대 컴퓨터에서는 8, 16, 32, 64처럼 2의 배수로 정해져 있습니다.
현대 컴퓨터에서는 8비트 = 1바이트로 배우지만, 이것 역시 사실이 아닙니다.
하드웨어를 다루는 C/C++ 같은 언어에서 8비트 = 1바이트라고 가정하지 말라. 비트와 바이트를 변환할 때는 상수 8 대신에 CHAR_BIT를 써라.라고 되어 있습니다.don't rely on 1 byte being 8 bit in size
use
CHAR_BIT
instead of 8 as a constant to convert between bits and bytes
10비트 머신에서는 10비트 = 1바이트이기 때문입니다.
C 언어 표준에서는 CHAR_BIT >= 8, 즉, 비트가 8개 이상이어야 한다만 지정합니다.
컴퓨터 공학 전공인 <컴퓨터 구조>에서는 WORD는 CPU가 레지스터에 한 번에 옮길 수 있는 데이터의 크기를 뜻하므로 32비트 시스템에서는 1 WORD = 32비트이고, 64비트 시스템에서는 1 WORD = 64비트이지만, 역사적으로는 16비트 시스템에서 WORD = 16비트로 썼으므로 32비트 시스템 어셈블리에서는 DWORD(더블 워드) = 32비트로 표기합니다. 이론과 실제 코드 사이에는 차이가 있습니다.
C 언어 표준안에서 int는 16비트 이상이면 되고, long은 32비트 이상이면 됩니다. 그러나 정수 타입의 크기는 C 언어 구현체와 플랫폼을 따라 갑니다.
C 언어는 다양한 비트 단위를 갖는 하드웨어를 지원해야 했으므로 데이터 모델이 있습니다. 데이터 모델에 따라 short, int, long 등의 크기가 정해집니다. 데이터 모델에 대해서는 UNIT 85.3을 살펴보세요. 데이터 모델에 따라 short가 64비트인 경우도 표에서 볼 수 있습니다.
C 언어는 하드웨어를 직접 조작하는 시스템 프로그래밍에서 쓰이므로 데이터 모델이 매우 중요합니다.