본문 바로가기
코스웨어/14년 스마트컨트롤러

2014년 3월 19일 업무일지 김화린 [출석번호 10번]

by 알 수 없는 사용자 2014. 3. 19.
728x90
반응형
<교재 p.274~287>

 

-예제- 

 

 

 

포인터 -> 주소를 저장하기 위한 변수이다.

모든 자료형은 그 type에 대한 포인트를 가진다.

포인터의 크기는 얼마 인가? 4byte!!

포인터는 주소를 담아야 하기 때문데 다 4byte 이다.

 

char   cNum;  // 1byte
char *  p;  
// 4byte

 

에서 p의 type은 char *가 아닌 포인터이다

bus의 크기에 의해 메모리의 크기가 좌우된다.

4G = 1024*1024*1024*4 -1
이고 16진수로 바꾸면 FFFF FFFF가 된다

 

 

1. 우리가 숫자를 보고 계산을 하려고 하면

ex> 456

   894

를 계산을 하려고 하면 앞에서 부터 계산을 하지 않는다 그것은 올림 수를 반영하기 위해서 이다.

2. 크기 비교는 앞의 숫자를 보고 앞에서 부터 비교를 한다.

ex)

1998

2500

을 볼 때 우리는 뒤에부터 보지않고 앞에의 숫자를 보고 대소를 비교한다. 이와같이 컴퓨터도 마찬가지인 것이다.

 

 

Intel Cpu에서는 12345678  을 저장을 하라고 하면 뒤집어서 저장을 한다.

78 56 34 12 이렇게 저장이 된다.

이렇게 저장하는 방식을 리틀 엔디안 (little endian) 이라고 한다.

Intel Cpu는 계산을 많이 해서 계산에 편리하게 저장이 되는 것이다. 출력을 할 때는 다시 뒤집어서 12 34 56 78 이렇게 출력이 된다.

Intel Cpu는 계산에는 유리하나 대소 비교에는 분리하다

 

super 컴퓨터는 12345678 을 뒤집지 않고 그대로 저장을 한다.

이렇게 저장 하는 방식을 빅 엔디안 (Big endian) 이라고 한다.

계산에는 분리 하지만 대소를 비교를 할 때는 유리하다.

 

 

 

 

 

 

컴퓨터에서 음수를 저장을 할 때는 보수를 취해서 저장을 하려고 한다.

양수일 때는 보수를 취하지 않지만 음수일 때는 보수를 취한다.

 

 

 

 

 

#include <stdio.h>

int main()
{
  int     iNum = 0x12345678;
  unsigned char * P =  (char *) (&iNum);

  *P = (0xAA);  // *P = (0xAA) 는 써라는 것 
  
  printf("%02X \n", *(P+1));  //*(P+1)는 Read 라는 뜻 읽은 후 16진수로 표현해라는 것
  printf("%02X \n", *(P+2));
  printf("%02X \n", *(P+3)); 
  printf("%02X \n", *(P+4));
  
//=이 개입 된것은 쓰라는 것이고 =이 개입되어 있지 않은 것은 읽으라는 뜻!!
  return 0;
}

 


 

 


 

 

 

728x90