빅-엔디안 머신에서 컴파일하고 실행하면 1을 리턴하고
리틀-엔디안 머신에서는 0을 리턴하는 프로시져 is_big_endian을 작성하라.
이 프로그램은 사용하는 워드 길이와 관계없이 모든 컴퓨터에서 실행 가능해야 한다.
-----------------------------------------------------------------------------------------------------------------
#include <stdio.h>
int is_big_endian() {
int x=1;
char *p=&x;
return 1-(*p);
}
int main() {
printf("%d",is_big_endian());
return 0;
}
위의 프로그램이 동작하는 이유는 다음과 같습니다.
리틀엔디언의 경우에는 가장작은 값이 0번째 바이트에 들어갑니다.
그래서 문자의 포인터에 정수변수의 주소값을 넣으면 문자포인터가 가리키는 한 바이트가
바로 가장작은 바이트이므로 1이 들어 있습니다.
따라서 (*p)에 1이 들어 있으므로 1-(*p) 는 0이 됩니다.
빅엔디언의 경우에 가장큰 값이 0번째 바이트에 들어갑니다.
그래서 문자포이터가 기리키는 바이트에는 0이 들어 있습니다.
따라서 (*p)에 0이 들어 있으므로 1-(*p) 는 1이 됩니다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
비주얼 스튜디오 실행파일 생성위치 (0) | 2012.07.20 |
---|---|
c언어에서 인자의 전달에 관하여 (0) | 2012.07.07 |
진법변환 (0) | 2012.07.02 |
세변의 길이를 입력 받아 직각/예각/둔각 삼각형 인지 판별하시오. (0) | 2012.07.02 |
연결리스트 (0) | 2012.06.24 |