0 0 0 0 0 0 0 0 8비트 = 1바이트(byte)
0이라는 한 자리에 숫자0,1 두가지만 들어간다.(2진수)
따라서 8자리이므로 2의 8제곱 = 256
1바이트 = 8비트
여기에 들어가는 숫자의 가지수는 256가지
숫자는 0~255까지 들어간다.
*숫자 수
37~65 = 29가지
0 ~ 100 = 101가지
1 ~ 100 = 100가지
계산방법 65 - 37 +1= 29이 나온다. 아래 것도 동일하게 나온다.
토큰
C언어 문장 하나하나를 나눌 수 있는 최소단위
ex) #include <stdio.h>
int main()
{
plrintf("~", );
return 0;
}
파란색 하나하나가 토큰이다. 참고로 printf("~",);에서 printf , ( , ", 내용, ", ), ; 이 하나하나 토큰 더 이상 나눌 수 없는 최소단위이다.
변수조건
1.영어 (처음글자), _(shift + -키)
2.함수이름 사용못함 - printf문등은 함수이름이라 사용못함.
3.예약어 금지(if, else....)
4.띄어쓰기 ex) int num ber; -> 보기와 같이 num ber처럼 띄어쓰기를 하면 안된다.
반드시 붙여서 int number;라고 선언해야 한다.
5.name_$ -> 변수는 숫자와 영어만 쓸 수 있다.
변수와 상수
number = 3;
number = 4;
여기서 3, 4는 변하지 않는 수 즉, 상수라고 한다. 위에서 number는 3을 지정하면 3이고, 4로 지정하면 4가 된다. 그래서 변할 수 있는 수이기 때문에 변수이다.
상수 = constant value
constant
다음에 예를 들어보겠다
3 = 4; 상수에 상수를 3과 4 둘 다 상수이다.
상수를 상수로 대입하는것은 C문법에서든, 우리가 알고 있는 수학에서든 있을 수 없는 일
4 = 4;
일반적인 생각은 4 = 4 틀리지 않다.
그러나 C에서는 이것 또한 받아들이지 않는다.
다음은 이것을 프로그램 해서 출력한 화면이다.
일부러 4 = 4; 를 짰다. 물론 프린트문을 쓰지 않았지만, 컴파일 하면 다음과 같은 에러가 발생한다.
에러 메시지를 해석해보자
위의 Microsoft ~
Copyright ~
이것은 신경쓰지 말자!!! 광고이다. Microsoft사에서 ㅅㅂ 쓸데없는 것 땜에 어렵게 해놨네.
그리고 그림 참조. 그림에서 동그라미1번은 '=' 표시이다. 이것을 해석하면 = 양쪽 옆에 이상이 있다라고 에러를 표시하는 것이다. 위에서 4 = 4;문이 틀렸다. 그리고 다음 잘 보면 왼쪽이 틀렸다고 빨간글로 써놨다. 즉 4 =4; 왼쪽인 4가 잘못되었다. 이것으로 이 문장에서는 변수로 4는 쓸 수 없다.
그리고 left operand - 왼쪽 연산자. 이것 또한 에러의 위치를 알려주는 뜻.
자 이번에는 정수형의 종류인 char, short, int에 대해서 알아보다.
알아보기 전에 저번에 정리한 컴퓨터의 양의 정수 ,음의 정수, 부호비트와 보수법의 관계에 대해 생각해보자.
|
이 네모가 1바이트. 즉 8비트형, 정수형 char는 1바이트형 바이트.
|
|
short는 2바이트 8비트가 2개.
|
|
|
|
int 4바이트가 되겠다. 8비트가 4개.
위의 그림에서 255는 그대로 출력이 되는것을 알 수 있다. 255는 8비트 최대의 숫자이다.
그러니깐 1111 1111을 10진수로 바꾸면 255 그래서 1바이트는 255가 출력되고 나머지도 마찬가지로 당연히 그대로 출력된다. 그러면 그것보다 훨씬 큰 300을 넣겠다.
short와 int부분은 그대로 300이다. 위의 계산기를 잘보라. 1 0010 1100은 자리수가 9자리이다. (300의 2진수) 아홉자리이기 때문에 8자리를 넘는 제일 앞부분은 1은 char에서는 인식을 못하고 0010 1100만 10진수로 바꾸어 44가 출력되어 나온다. 아래에 short나 int는 각각 2바이트 16자리 4바이트 32자리이기 때문에 그대로 출력된다.
아래그림은 16자리 최대값인 1111 1111 1111 1111을 나타낸거임.
위와 마찬가지로 1바이트 char는 최대값 1111 1111만 출력되어 255!
65535보다 1더 큰 65536으로 해본 결과이다.
이번에는 16자리수를 넘어 17자리수로 가기때문에 short문 또한 0이 된다.
마찬가지 뒤에 10만 출력되어 2가 나왔다.
이번부터는 unsigned를 정의 하지 않고 프로그램을 해보겠다!!1
여기서부터 진짜~~~~~~~ 헤갈린다.
0 127 128 255
8비트는 0~ 255까지 표현된다. 그러나 이것을 절반으로 쪼개어 왼쪽으로 음수로 옮긴다.
0 127 128 255
위의 빨간줄 부분을 왼쪽으로 옮긴다.
128 129 130 131 255 0 1 2 3 255
(-128) -127 -126 (-125) (-1)
이렇게된다. 이 그림을 이해하자 8비트에서 255가 -1이다.
자 그럼 아래 그림을 비교해보자.
위의 언급했듯이 unsigned를 쓴것이다.
그렇다면, 쓰지 않으면, 아래와 같은 그림이 된다.
위그림에서 출력값이 다르다라는것을 알 수 있다.
이것은 8비트에서는 0~255가 숫자범위이다. 하지만 위의 수평선 그려놓은 것을 잘봐라. 128~ 255는 -로 취급한다. 즉, unsigned를 썼을 때는 그냥 양의 정수로 출력이 된다. 이 unsinged는 양의 정수만 허용한다고 봐야한다.
그러나 unsigned를 허용하지 않을 때는 수평선대로-까지 고려한다. 따라서 0~127이넘는 숫자가 나올경우는 -로 출력이 되는 것이다.
이번엔 32자리.
'C언어 수업정리 > 3월 수업정리' 카테고리의 다른 글
3월11일 아스키코드, 유니코드 ,연산자, 논리식.... (0) | 2013.03.11 |
---|---|
3월 8일 형수정자 연산자 sizeof (1) | 2013.03.08 |
3월 6일 기본, 변수, 자료형(숫자) (0) | 2013.03.06 |
3월 5일 수업정리 C언어 기본작성 전처리파일, 기계어파일 (0) | 2013.03.05 |
3월 4일 수업정리 cpu3대 구성요소 (0) | 2013.03.04 |