fgetc가 반환하는 자료형은 char가 아닌 int형.
fgetc는 파일에서 문자 하나를 읽을 때 사용한다.
왜 4바이트의 int형이 필요할까?
일단, fgetc의 4바이트 변환에 대해서 알아보자.
모든 문자는 우리 눈에 문자로 보일 뿐 컴퓨터에겐 그저 비트로 표현된 바이트일 뿐이다.
만약에 01010010 이라는 문자를 읽었다면
fgetc는 이것의 앞 3바이트 00000000 00000000 00000000 을 붙인다.
즉, 00000000 00000000 00000000 01010010 이 되는 것.
이렇게 하는 이유는 무엇일까??
그것은 바로 EOF를 표현하기 위해서다.
EOF 는 -1인데 이것은 비트로 표현하면
11111111 11111111 11111111 11111111 이다.
왜냐면 +1 은 00000000 00000000 00000000 00000001 이고 이것의 2의 보수는 모든 비트에 보수를 취하고 마지막으로 최하위 비트에 1을 더하면 결국 모든 비트 자리에 1이 있는 것이 -1이다.
이렇게 1바이트로 표현할 수 없는 이유는 무엇일까?
그것은 문자로 이루어진 파일에서 1바이트로 된 -1을 반환한다면 그것이 -1인지 아니면 어떤 문자의 표현인지 구분이 되지 않기 때문.
즉, 만약 문자라면 무조건 앞의 3바이트는 00000000 으로 채워질 것이다. 그러나 EOF라면 -1이라는 숫자를 4바이트로 표현함에 따라 11111111 11111111 11111111 11111111 일 것이다.
'프로그래밍' 카테고리의 다른 글
feof 함수 (0) | 2012.06.02 |
---|---|
fgets와 gets의 차이점? (0) | 2012.06.02 |
scanf / gets / getchar (0) | 2012.06.02 |
SSM - 지원할 프로그램에 관하여 (0) | 2012.05.28 |
삼성 소프트웨어 멤버십 지원 대비 포트폴리오 제작 (0) | 2012.05.28 |