달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 11. 6. 20:43

1106) 제목 미정. 부제 미정. - 1 - 2010. 11. 6. 20:43

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 11. 6. 20:41

1106) 제목 미정. 프롤로그. 2010. 11. 6. 20:41

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 11. 5. 17:59

1105) 두더지게임 + usart 전송 + 레벨업!! 2010. 11. 5. 17:59

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 11. 3. 17:41

1103) 공부 / 두더지 하던 것 / 두더지 최종판 2010. 11. 3. 17:41

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 11. 3. 11:20

1103) PC >> AVR 로 직렬통신 실습(LED 제어) 2010. 11. 3. 11:20

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 11. 2. 14:17

1102) baud rate / USART 실습(직렬통신 실습) 2010. 11. 2. 14:17

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 29. 18:05

1029) 두더지 2차(수정중) 2010. 10. 29. 18:05

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 29. 01:07

1029) 두더지 1차. (수정중) 2010. 10. 29. 01:07

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 28. 16:05

1028) eeprom 실습 / 두더지 2010. 10. 28. 16:05

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 26. 08:29

1025 / 업무 / ATmega128 / 2010. 10. 26. 08:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 22. 14:52

1022) 업무 / 비교매치 인터럽트, CTC모드 / 2010. 10. 22. 14:52

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 20. 12:02

1020) 업무 / 교재(p141 ~ ) / 2010. 10. 20. 12:02

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 19. 09:52

1019) 업무 / 교재(포인터) 2010. 10. 19. 09:52

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2010. 10. 17. 18:55

메모리에 저장할 때 최적화. 공부2010. 10. 17. 18:55

메모리에 저장할 때
 >> 메모리 최적화 (메모리 아낌)
 >> 속도
둘중에 하나를 중시할 수 있다.

                     
                        자료형을 다양하게 준 뒤 해당 변수들의 주소를 추적하게 되면



                                 16진수로 해당 주소들을 확인할 수 있다.

자료형에 따라 주소 설정의 크기가 얼마씩 증가하는지 확인해보자.


 자료형 차지 바이트  주소 끝을 10진수로 실제 차이 
 int  4   bffffa38  2616  
 int  4  bffffa34   2612  ↓ 4
 int  4  bffffa30  2608  ↓ 4
 int  4  bffffa2c  2604  ↓ 4
 float  4  bffffa28  2600  ↓ 4
 float  4  bffffa24  2596  ↓ 4
 float  4  bffffa20  2592  ↓ 4
 float  4  bffffa1c  2588  ↓ 4
 short  2  bffffa1a  2586  ↓ 2
 char  1  bffffa19  2585  ↓ 1
 int *  4  bffffa14  2580  ↓ 5
 char  1  bffffa13  2579  ↓ 1
 char *  4  bffffa0c  2572  ↓ 7

char 형은 1바이트, short는 2바이트, int, float, 그리고 포인터형들 char* 나 int* 은 모두 4바이트의 공간을 가진다.

실제 메모리에서 해당 자료형들이 저장될 때 4바이트 단위를 한 줄이라고 생각한다면
아래의 그림과 같다.


                           < 코드에서 소문자, 그림에서 대문자.. 죄송합니다 -_-; >

A,B,C,D 는 int 형이다. 4바이트. 1줄씩 차지했다.
E,F,G,H 는 float 형이다. 4바이트. 1줄씩 차지했다.
I 는 short 형이다. 2바이트. 오른쪽의 2칸을 차지.
J 는 char 형이다. 1바이트. short 바로 왼쪽의 1칸을 차지.
K 는 int* 형이다. 4바이트. 바로 위의 1줄을 차지. (중간에 결손 1바이트 발생)
L 은 char 형이다. 1바이트. 1칸 차지.
M 은 char* 형이다. 4바이트. 바로 위의 1줄을 차지. (중간에 결손 3바이트 발생)


char 다음에 오는 4바이트 단위의 자료형들은 여백을 뛰어넘어 윗줄로 바로 올라간다.
자료형대로의 필요 바이트는 44지만, 실제 사용한건 48바이트이다.

만약에 L 을 J 다음에 선언을 했다면 결손이 없어지게 된다.
이것을 메모리의 최적화라고 한다.

후에 고급 기술로 넘어간다면 속도 or 메모리 최적화 중에 한가지를 선택하게 된다.
임베디드 시스템은 적은 메모리를 사용해야 할 때도 있기 때문에 유념하자.

:
Posted by 투잌
2010. 10. 17. 18:52

포인터와 캐스트 공부2010. 10. 17. 18:52


★ 포인터와 캐스트

float *fp 선언후에
fp=3;
이라고 한 뒤 컴파일 하면 warning이 뜬다. (파일 실행에는 이상 없음.)

왼쪽은 자료형이 float* 형이고
오른쪽 '3' 은 자동적으로 int형이라 양쪽의 자료형이 일치하지 않는다.

포인터형에 값을 초기화해줄때는 자료형이 같지 않다면 컴파일시 warning이 뜸.
 >> 파일 실행에는 이상이 없음.

warning을 없애고 싶다면 양쪽의 자료형을 통일시켜주면 된다.

fp = (float*)3;

이렇게 하면 3이 자동으적으로 float형 포인터로 형 변환이 일어나서 warning이 없어진다.

만약에
int x;
int *xp;
xp = &x;
라고 정의를 했을 때에는
warning이 뜨지 않는다.
왼쪽의 xp는 *int 형이고
오른쪽의 x는 int형인데, &이 *로 인식되기때문에 결국 *int 형으로 인식되고
왼쪽과 오른쪽의 형이 같기 때문에 warning 이 뜨지 않는다.


변수명 앞에 * 가 있으면
ex) *iNum;

 >> 1. 해당 변수가 있는지 확인
 >> 2. 해당 변수가 포인터형인지 확인
 >> 3. 포인터형이 아니라면 곱셈으로 치부
 >> 곱셈은 다항연산자라, 항이 2개 필요 / 현재 항은 iNum하나만...
 >> 컴파일시 에러 발생

★ iNum이 포인터형이라면 컴파일시에러 없음
 ex) int iNum*;
 *iNum;

포인터형 앞에 * 을 붙이면 해당 주소가 된다.

:
Posted by 투잌
2010. 10. 17. 18:49

C언어 / 구구단 소스. 공부2010. 10. 17. 18:49

1. 구구단을 한단만 출력해보라. (원하는 단 입력 받아서.)


소스



결과


2. 구구단 전체를 모두 출력해보라.


소스





결과

3. 구구단중 일부만 (4~7단) 출력해보라.


소스



결과

4. 2부터 50사이의 소수를 출력해보라.

http://tooecc.tistory.com/32
:
Posted by 투잌
2010. 10. 17. 18:46

논리 연산자 계산순서( || && ) / 증감 연산자 공부2010. 10. 17. 18:46

논리 연산자

&& = 둘 다 참일 때 결과도 참
|| = 둘 중 하나가 참일 때 결과도 참
! = 참을 거짓으로, 거짓을 참으로 바꿈.

A=3&&4;
 >> 1
 >> 0이 아닌 수는 모두 참이므로 참 출력(1)


논리 연산자 || 과 &&의 계산순서

 >> &&은 왼쪽이 참이기 때문, 양쪽을 모두 비교해야 하기 때문, 끝까지 연산

 >> || 은 왼쪽이 참이라면 오른쪽을 무시하고 바로 결과는 참



A=10 이 선언된 이후 || 논리연산은 왼쪽이 참이라 바로 연산을 마무리해버린다.
오른쪽 A가 초기화 되지 않았기 때문에 A를 출력하면 A=10 이 그대로 출력됨.

&& 논리연산은 양쪽 모두를 비교하여 참, 거짓을 판단하기 때문에 왼쪽, 오른쪽 모두 연산 하게 된다.
오른쪽의 A=5 로 초기화되기 때문에, 새로 A를 출력하면 A=5가 나오는것이 확인된다.
   ★ 단... 만약 왼쪽항이 거짓이라면 조건은 무조건 거짓이 되기 때문에, 
       ||과 마찬가지로 오른쪽을 무시하게 됨. 유의하세요.




증감 연산자

전치형 :  증감을 먼저 한후에, 연산한다.

B=++A
계산을 풀어쓰면

1.  A=A+1    (A를 먼저 증감시키고)
2.  B=A     (증감시킨 값을 B에 대입[연산]한다.)

ex) int A=10;
      printf("결과 : %d", ++A);

      실행시 A의 값을 먼저 증감시킨 후에 %d에 대입(연산)시킨다.
      결과 : 11 출력

후치형 : 연산을 먼저한 후에 증감한다.
B=A++
계산을 풀어쓰면

1.  B=A     (A 값을 B에 대입[연산]한다.)
2.  A=A+1    (B와는 별개로 A값을 1 증감) 

ex) A=10;
      printf("%d", A++);

      실행시 A의 값을 %d에 먼저 대입(연산) 한 뒤 증감시킨다.
      결과 : 10 출력

'공부' 카테고리의 다른 글

포인터와 캐스트  (0) 2010.10.17
C언어 / 구구단 소스.  (0) 2010.10.17
short 의 최대, 최소값 구하기  (0) 2010.10.17
아스키 코드 / 빠르게 아스키 코드 확인법 Alt + 숫자  (2) 2010.10.17
signed 와 unsigned  (0) 2010.10.17
:
Posted by 투잌
2010. 10. 17. 18:38

short 의 최대, 최소값 구하기 공부2010. 10. 17. 18:38

short 의 최대, 최소값

short 를 2바이트라고 쳤을 때 >> 16비트 라고 쳤을 때 정수를 나타낼 수 있는 최대값을

 0  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1


로 나타낼 수 있다. 그렇다면 최소값은 얼마일까? (제일 앞의 자리는 양, 음수 구분)

비트 단위로 따졌을 때 최대값에서 +1을 하게 되면 다음 비트의 최소값으로 변하게 된다.
위의 수에서 +1을 하였을 때의 수는 0111 1111 1111 1111 의
반대값인 1000 0000 0000 0000 이 된다.

 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

실제로 그런지 계산해보자. 니들 단위로 나누어서 16진수로 바꾸게 되면

    1000  0000  0000  0000
       8      0      0       0      =  16진수 8000 으로 생각할 수 있다.

vi 에서 8000을 가볍게 10진수로 바꾸어보자.



 1000 0000 0000 0000 = 10진수의 음수 -32768 이고
 해당 수에서 -1을 하였을 때는 10진수의 양수 32767 이 됨을 알 수 있다.

아까 +1을 해서 1000 0000 0000 0000 을 구했으니
-1 을 하면 최초 원점에서 생각했던 0111 1111 1111 1111 = 32767이 됨을 알 수 있다.

short 의 최대값은 32767, 최소값은 -32768 임을 알수 있고
short 로 표현할 수 있는 수의 총 갯수는 65536 개로 결론.
:
Posted by 투잌

아스키 코드 (ASCII CODE)

  아스키(ASCII) 또는 미국 정보 교환 표준 부호(American Standard Code for Information Interchange)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기반한다.

  아스키는 1967년에 표준으로 제정되어 1986년에 마지막으로 개정되었다. 아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다.

  아스키가 널리 사용되면서 다양한 아스키 기반의 확장 인코딩들이 등장했으며, 이들을 묶어서 아스키라고 부르기도 한다. 대표적으로 7비트 인코딩을 유지한 ISO/IEC 646과, 원래 아스키 코드 앞에 비트 0을 넣어 8비트 인코딩을 만든 IBM 코드 페이지와 ISO 8859가 있다. 이 인코딩들은 언어군에 따라 같은 숫자에 서로 다른 문자가 배당된 경우가 많다.
  (출처 : 위키백과 http://ko.wikipedia.org/ )





작은 따옴표 사이에 있으면 숫자도 문자로 치이고, 거기에 해당되는 숫자로 치환된다. 
알파벳 A부터 z까지, 특수문자등도 해당되는 숫자를 가지게 되는데 그것이 아스키 코드이다.

아스키 코드표

출처 : http://www.jasko.co.kr/lesson/ascii.html

[출처] 아스키 코드표|작성자 게레겡


 ASCII  10진수  16진수  8진수  2진수 ASCII 10진수 16진수 8진수 2진수
 NULL     0   0×00    0     0   @    64   0×40   100  1000000
 SOH     1   0×01    1     1   A    65   0×41   101  1000001
 STX     2   0×02    2    10   B    66   0×42   102  1000010
 ETX     3   0×03    3    11   C    67   0×43   103  1000011
 EOT     4   0×04    4   100   D    68   0×44   104  1000100
 ENQ     5   0×05    5   101   E    69   0×45   105  1000101
 ACK     6   0×06    6   110   F    70   0×46   106  1000110
 BEL     7   0×07    7   111   G    71   0×47   107  1000111
 BS     8   0×08   10  1000   H    72   0×48   110  1001000
 HT     9   0×09   11  1001   I    73   0×49   111  1001001
 LF    10   0×0A   12  1010   J    74   0×4A   112  1001010
 VT    11   0×0B   13  1011   K    75   0×4B   113  1001011
 FF    12   0×0C   14  1100   L    76   0×4C   114  1001100
 CR    13   0×0D   15  1101   M    77   0×4D   115  1001101
 SO    14   0×0E   16  1110   N    78   0×4E   116  1001110
 SI    15   0×0F   17  1111   O    79   0×4F   117  1001111
 DLE    16   0×10   20  10000   P    80   0×50   120  1010000
 DC1    17   0×11   21  10001   Q    81   0×51   121  1010001
 SC2    18   0×12   22  10010   R    82   0×52   122  1010010
 SC3    19   0×13   23  10011   S    83   0×53   123  1010011
 SC4    20   0×14   24  10100   T    84   0×54   124  1010100
 NAK    21   0×15   25  10101   U    85   0×55   125  1010101
 SYN    22   0×16   26  10110   V    86   0×56   126  1010110
 ETB    23   0×17   27  10111   W    87   0×57   127  1010111
 CAN    24   0×18   30  11000   X    88   0×58   130  1011000
 EM    25   0×19   31  11001   Y    89   0×59   131  1011001
 SUB    26   0×1A   32  11010   Z    90   0×5A   132  1011010
 ESC    27   0×1B   33  11011   [    91   0×5B   133  1011011
 FS    28   0×1C   34  11100   \    92   0×5C   134  1011100
 GS    29   0×1D   35  11101   ]    93   0×5D   135  1011101
 RS    30   0×1E   36  11110   ^    94   0×5E   136  1011110
 US    31   0×1F   37  11111   _     95   0×5F   137  1011111
 SP    32   0×20   40  100000   .    96   0×60   140  1100000
  !    33   0×21   41  100001   a    97   0×61   141  1100001
  "    34   0×22   42  100010   b    98   0×62   142  1100010
  #    35   0×23   43  100011   c    99   0×63   143  1100011
  $    36   0×24   44  100100   d   100   0×64   144  1100100
  %    37   0×25   45  100101   e   101   0×65   145  1100101
  &    38   0×26   46  100110   f   102   0×66   146  1100110
  '    39   0×27   47  100111   g   103   0×67   147  1100111
   (    40   0×28   50  101000   h   104   0×68   150  1101000
   )    41   0×29   51  101001   i   105   0×69   151  1101001
   *    42   0×2A   52  101010   j   106   0×6A   152  1101010
   +    43   0×2B   53  101011   k   107   0×6B   153  1101011
   '    44   0×2C   54  101100   l   108   0×6C   154  1101100
   -    45   0×2D   55  101101   m   109   0×6D   155  1101101
   .    46   0×2E   56  101110   n   110   0×6E   156  1101110
   /    47   0×2F   57  101111   o   111   0×6F   157  1101111
   0    48   0×30   60  110000   p   112   0×70   160  1110000
   1    49   0×31   61  110001   q   113   0×71   161  1110001
   2    50   0×32   62  110010   r   114   0×72   162  1110010
   3    51   0×33   63  110011   s   115   0×73   163  1110011
   4    52   0×34   64  110100   t   116   0×74   164  1110100
   5    53   0×35   65  110101   u   117   0×75   165  1110101
   6    54   0×36   66  110110   v   118   0×76   166  1110110
   7    55   0×37   67  110111   w   119   0×77   167  1110111
   8    56   0×38   70  111000   x   120   0×78   170  1111000
   9    57   0×39   71  111001   y   121   0×79   171  1111001
   :    58   0×3A   72  111010   z   122   0×7A   172  1111010
   ;    59   0×3B   73  111011   {   123   0×7B   173  1111011
   <    60   0×3C   74  111100   |   124   0×7C   174  1111100
   =    61   0×3D   75  111101   }   125   0×7D   175  1111101
   >    62   0×3E   76  111110   ~   126   0×7E   176  1111110
   ?    63   0×3F   77  111111  DEL   127   0×7F   177  1111111
         


★ Tip ★

Alt + 키보드 오른쪽 숫자키를 누르면 해당 숫자의 아스키 코드가 입력된다.
예를 들어 A를 찍고 싶다면, Alt 를 누른 상태에서 대문자 A의 아스키 코드 (A는 65다) 를 입력한뒤 Alt 를 떼보자.
 >> ★주의★ 숫자는 키보드 오른쪽 숫자키를 눌러야만 통한다.

A가 찍히는걸 볼 수 있을 것이다. ~_~

아스키 코드만 나와 있고, 이것이 무엇을 뜻하는지 모를 때 쓰면 아주아주 유용하다~ (윈도우, 리눅스 모두 통함)

도움이 되셨다면, 이 글 댓글에다가 Alt + 아스키코드로 한 글자만 찍고 가주세요. ㅠㅠ 댓글이 그리워요~~
 

'공부' 카테고리의 다른 글

논리 연산자 계산순서( || && ) / 증감 연산자  (0) 2010.10.17
short 의 최대, 최소값 구하기  (0) 2010.10.17
signed 와 unsigned  (0) 2010.10.17
보수와 2진법에서 음수표현법  (0) 2010.10.17
진법과 계산법  (0) 2010.10.17
:
Posted by 투잌
2010. 10. 17. 18:29

signed 와 unsigned 공부2010. 10. 17. 18:29


signed 와 unsigned

변수를 선언할 때 아무것도 안 적고 자료형(Data type)을 바로 쓴다면 signed가 앞에 적혀 있다고 보면 된다.

ex)  char cNum1
에서 char가 자료형, cNum1 이 변수이다.
char 앞에는 'signed'가 생략되어 있다. 그대로 적어줘도 동일한 코딩이다.

unsigned 를 표현하고 싶다면 자료형 앞에 'unsigned'라고 넣어주면 된다.





signed는 -128 ~ 127 까지의 양수와 음수 둘다(정수) 쓰겠다는 명령이고
unsigned 는 0 ~ 255 까지 범위의 양수만 쓰겠다는 명령이다.

만약 127을 입력하고 그걸 출력한다면 둘다 127까지는 범위안이기 때문에 동일하게 출력된다.
대신 128을 입력하게 되면 signed는 범위를 넘어가기 때문에 비트단위 계산으로 127의 다음숫자인 -128, unsigned는 당연히 범위 안이기 때문에 그 결과 그대로 출력된다.


혹시나 255를 입력하게 되면 signed는 -1이 , unsigned 는 범위안이기 때문 255 그대로 출력한다.


char(1바이트)와 short(2바이트)의 입력할 수 있는 최대값을 구하고 싶다면
unsigned char
unsigned short 에서 -1을 입력해주면 된다.


보면 short의 최대값은 65535 , char의 최대값은 255인 것을 확인할 수 있다.

0부터 시작한다고 보았을 때 char는 0부터 255까지 총 256개,
short는 0부터 65535까지 65536개의 숫자 입력이 가능하다.

char = 1바이트 = 8비트 = 2의 8승값 = 256
short = 2바이트 = 16비트 = 2의 16승값 = 65536
이라고 이해해도 무방하다.

그렇다면 int 는 4바이트이기 때문에
int = 4바이트 = 32비트 = 2의 32승값 = 4,294,967,296
int 로 자료형을 선언했을 때 4,294,967,296 가지로 범위가 매우 넓음을 알 수 있다.
:
Posted by 투잌