Busan IT/제어언어2015. 1. 30. 17:42

수의 출력, 연산 그리고 address

 

학습목표 : 변수형과 형수정자를 조작하여 자유롭게 정수와 실수를 표현할 수 있다.

연산자를 활용하여 정수와 실수를 표현할 수 있다.

심볼테이블과 address를 표현할 수 있다.

 

#1. 정수와 변수형

 

지난 시간 CPU와 메모리 사이의 처리과정을 배웠다.

 

변수를 만들 때 값을 넣음으로써 초기화할 수 있다.

 

어떠한 값을 넣었을 때 특정 값을 나오는 이유를 이해할 수 있어야 한다.

 

실습)257를 입력했을 때와 999를 넣었을 때를 연습해본다. 값이 나오는 논리를 이해한다.

 

숫자 25732bit CPU에서는 0000 0001 0000 0001(16)으로 인식한다.

그러므로 메모리는 01을 가져 오는데 이것은 1임으로 결과창에 1로 표시된다.

 

 

999CPU에서 3E7으로 인식되고 이것은 8bit에서 1110 0111값을 가짐으로 음수임을 알 수 있다.

 

그러므로 여기에 1의 보수를 취하면 0001 1000이고 여기에 1을 더하면 0001 1001임으로 결과값은 -25가 된다.

 

 

Bell사가 전화기로 미국에서 크게 성공하고 벨 연구소를 만든다.

 

벨 연구소에서 슈퍼컴퓨터에 있는 운영체제를 개인적으로 쓸 수 있는 방법을 고안하여 나오는 것이 Unix이다. 통신사에서 쓰는 운영체제는 Unix이다. Unix 연구를 통해 많은 수의 해커들이 양성되고 핀란드인 또 다른 운영체제를 만든 것이 Linux이다. 리눅스 안에 Java엔진이 있고 AndroidJava를 기반으로 돌아가는 프로그램이다. Unix를 개발할 때 쓰인 언어가 C언어이다.

 

C언어의 표준화를 위해 ANSI C를 정립하였다.

 

변수형에서 Int가 기준이 되고 Int를 줄일 때 short (int) 늘릴 때 long (int)를 쓴다.

 

정수는 4가지 타입이 있다.

 

char(1) < short(2) < int(4) < long(4)

#2. ASCII코드와 컴퓨터의 사칙연산

 

형수정자란 기본형의 자료의 형태를 바꿔주는 역할을 하는 명령어이고 여기에는

short long signed unsigned가 있다.

 

표시 형식에 %d가 되어 있으면 signed decimal을 표시하기 때문에 최대수를 넣어봤자 -1이 나온다.

 

이것을 %u로 바꾸면 unsigned의 약자임으로 양수로 표현이 된다.

 

프로그램 작동을 최적화 시키려면 레지스터와 메모리가 일치시켜야 한다. 메모리를 쓰지 않는 경우에도 CPU에서 쓰지 않는 메모리에 대한 제어를 해야 하기 때문에 메모리를 적게 쓴다고 속도가 높아지는 것은 아니다. 하여 변수를 크기를 꼭 줄여야 하는 것은 아니다.

 

C에서 기본적으로 변수의 모양을 정해놓은 것을 기본형이라고 한다.

 

char은 알파벳에 대한 숫자를 저장한다.

 

알파벳에 대한 표시는 그림으로 출력하지만 저장하고 출력하는 것은 숫자이다.

 

charASCII를 사용하기 위해 쓰인다.

 

 

ALT를 누른 상태에서 숫자를 누르면 ASCII(American Standard Code for Information interchange)코드를 테스트할 수 있다.

 

컴퓨터의 사칙연산 + - * /로 표시

 

CPU에서 소수점의 계산은 상당히 복잡하기 때문에 정수로만 표현해준다.

 

연산기호에서 %를 쓰면 나누기 후에 나머지를 표시해준다.

 

실습>> unsigned 방식에서 음수가 나오게 표현시켜보자.

 

컴퓨터는 2진수를 사용하고 인간은 10진수를 사용하기 때문에 소수점의 진수 변환에 대한 문제가 생긴다.

 

10진수에 있는 소수점을 2진수로 바꾸는 방법은 소수점 이상의 수에 대하여 우선 2진수로 변환하고 소수점 이하의 값에 대해서는 *2를 한 다음에 앞에 1이 나오면 1 소수점 뒤에 표시해 준다.

#3. 실수의 표현과 sizeof

 

10진수를 2진수로 고치는 방법

 

첫째자리 0.5 둘째자리 0.25 셋째짜리 0.125...

 

소수점 자리에 곱하기 2를 하여 1로 넘어가는 경우는 소수점 자리에 1을 표시하고 이 숫자가 다 소거될 때까지 계속 2를 곱해준다.

 

실습) 3.5, 0.625, 0.2

 

0.2는 순환소수이기 때문에 저장되지 않는다. 이 같은 경우에는 오차가 생겨난다.

 

실수형을 저장하는 변수형을 float이라고 한다. 크기는 4byte이다. 8byte의 경우에는 double이라는 변수형을 쓴다.

 

실수가 개입되는 경우 컴퓨터의 연산이 느려진다. 때문에 소수점이 없는 경우에는 정수형을 써야 한다.

 

실습) float으로 3.2표시

 

5/3

 

5/3

 

둘 중에 하나면 소수점을 넣어주면 소수점으로 결과 값을 보여준다.(OR logic)

 

Cast연산자(형변환 연산자)

 

둥근 가로로 기본형을 기입하는 방법을 Cast연산자라고 한다.

 

* 현재까지 배운 연산자

 

=, +, -, *, /, %, ()

 

sizeof연산자

 

뒤에 적은 대상의 크기를 알려준다(int 형으로)

 

학습) CPU와 메모리의 의사소통에 대해서 다시 찾아본다.

#4. 여러 종류의 출력 방법과 address

 

문자 출력법 = %c

 

ASCII를 찾는 방법 찾고 싶은 문자를 넣고 %d로 출력한다.

 

여러 가지 문자를 연속으로 출력하는 방법

 

printf("%c%c%d%c\n", 'T','E','S','T');

 

%기호를 넣고 삽입하고 싶은 형태를 넣은 후 입력하면 ‘’,마다 순차적으로 입력한 형태를 표현한다.

 

주소연산자(&, 앰퍼샌드, ampersand)

 

//주석처리하는 명령어

 

심볼테이블

 

Type

Name

Address

int

iNum

1BF7DC

char

cNum

1BF7E3

float

fNum

1BF7D8

 

 

* 위의 처리과정이 CPUMemory에서 어떻게 일어나는 그림으로 그려서 올려야 한다.

 

address.c


char.c


main.c


pmmd.c


sizeof.c


var.c

20150130-수의 출력, 연산 그리고 address.hwp


반응형
Posted by newind2000