Intel ( 계산을 자주하는 CPU )
little endian(리틀 엔디안)방식
->산술에는 유리하지만 숫자의 대소비교에는 불리하다.
12 |
34 |
56 |
78 |
이렇게 뒤집어서 저장을 하게된다.
78 |
56 |
34 |
12 |
-> printf로 출력했을때에 다시
12 |
34 |
56 |
78 |
로 뒤집혀서 출력된다.
Super ( 논리연산을 자주하는 CPU (ex:참or거짓) )
Big endian(빅 엔디안)방식
->대소비교에는 유리하지만 산술에는 불리하다.
12 |
34 |
56 |
78 |
*상대적으로 유리하며 불리하다는 것임. CPU의 계산 속도는 매우 빠르다! (불리하던 유리하던.)
위 사진을 보면 분명히 12번째 줄에 *p로 첫번째의 메모리를 AA로 바꾸었다.
(생각해보면 [12][34][56][78] 의 첫번째 [12]->[AA])
하지만 출력된 값은 [12][34][56][AA]이다.
이 이유가 little endian방식을 사용하기 때문이다.
[78][56][34][12] 에서의 첫번째 메모리 [78]->[AA]으로 바꾸었다고 컴퓨터는 생각하기 때문에.
이 소스의 /*코드를 보면 15번째줄에 *p를 출력하라고 명령하였는데, 출력된값은 ffffffaa이다.
이 이유는 16진수의 AA 즉 1010 1010을 컴파일러가 음수로 받아들여 1010 1010의 앞을 전부 1로 채우기 때문이다.
1111 1111 1111 1111 1111 1111 1010 1010인 것!! 그렇기 때문에 값을 출력할때 16진수의 값 ffffffaa가 나오게 되는 것이당 ^^!~!!*/
char * p=(char*)&iNum; AA(1010 1010)=10진수 170(-40)
가 음수정수로 저장 되기 때문에 FFFFFFAA 가 저장됨
/* char 형 값의 표현 범위 -128 ~ +127 */
/* char 형 값의 표현 범위 -128 ~ +127 */
음수로 출력되는 것을 막기위해! unsigned char를 입력해주었다!
그러자 출력값이 aa가 뜨는것을 확인할 수 있다!
... |
... |
AA |
56 |
34 |
12 |
... |
... |
P P + 1 P + 2 P + 3
15번째 줄 *(p+1)은 p의 +1메모리를 읽으라는 뜻
*p=0xAA; 는 AA를 p에 넣으라는뜻!!
두개의 뜻은 다르다!!
'교육 > *' 카테고리의 다른 글
비공개 DOS올리기^^ (0) | 2014.03.20 |
---|---|
DOS로 선생님 폴더에 내 파일 업로드하기 (0) | 2014.03.20 |
소수...;;; (0) | 2014.03.19 |
출력! (0) | 2014.03.18 |
ㅠㅠ형식 (0) | 2014.03.18 |