[문제] 10월 4일 (아스키 코드, 상수, 실수)
1.문자가 뿌려지는 원리를 설명해 보시오.
컴퓨터는 문자를 바로 이해할 수 없다. 따라서 각각의 문자마다 숫자를 매칭시켜 두었는데 이것을 코드표라고 한다. 코드표에는 아스키 코드, 유니코드 등 다양한 종류가 있다.
이 코드표를 기반으로 문자에 할당된 숫자를 이용해 컴퓨터로 전달해 출력되게 된다.
2. ASKII(아스키 코드)란?
미국정보교환표준부호(American Standard Code for Information Interchange)로 1963년 미국에서 표준화한 전산기기간 정보교환을 위한 7비트 부호체계를 말한다.
3. Java Keywords: 키워드란?
예약어라고도 하며 자바에서 문법적으로 정해진 것을 말한다.
(이클립스에서는 붉은색으로 표시되는 단어를 말한다.)
예를 들면 int, double 등이 있다.
4. 컴퓨터에서 음의 정수 표현 방법
양의 정수 이진수 표현에 2의 보수(양의 정수에 1의 보수를 취한 값에 1을 더한다)를 취한 결과를 음의 정수로 표현한다.
5. -5의 '컴퓨터에서의 2진수 값'을 나타내시오.
정수 5의 이진수 값은 00000101 이고 이 값의 1의 보수는 11111010이다
이 값에 1을 더한 11111011이 5의 컴퓨터에서의 2진수 값이다.
6. 실수에서 오차가 생기는 원인은?
각 실수 값 사이에는 무수히 많은 실수 값이 존재한다. 이 값을 유한한 크기를 가진 메모리가 표현할 수 없어 표현할 수 있는 범위를 정해두고 이 범위에서 최대한 근사값이 출력되기 때문에 오차가 발생한다.
7. 실수의 표현법(고정소수법, 부동소수법)을 설명하시오.
⊙ 고정소수법
실수는 보통 정수부와 소수부로 나누어지는데 이 때 소수부의 자릿수를 고정해 두는 방식을 고정 소수점(Fixed Point)라고 한다.
하지만 이 방식은 정수부와 소수부의 자릿수가 크지 않으므로, 표현할 수 있는 범위가 매우 적다.
⊙ 부동소수법
실수를 정수부와 소수부가 아닌 정해진 수식(IEEE 754)을 이용해 가수부와 지수부로 나누어 표현하는 방식을 말한다. 고정소수법이 제한적인 자릿수로 표현할 수 있는 범위가 적은 것에 반해 부동소수법은 매우 큰 실수까지도 표현할 수 있다. 그래서 현재 대부분의 시스템에서 부동소수법을 사용하고 있다.
하지만 부동소수법을 해 표현한 실수 값은 항상 오차가 존재한다. 위 공식을 상용하면 표현할 수 있는 범위는 늘어나지만, 10진수를 정확하게 표현할 수는 없기 때문이다.
8. 정밀도란?
변수의 자료형은 해당 변수에 값을 저장 및 참조하는 방식을 정한다. 자료형 중 float와 double은 모두 실수를 표현하는 자료형이다. 실수를 표현할 때 float와 double 중 어떤 것을 사용할지 선택 기준은 정밀도라고 할 수 있다.
float은 소수점 아래 7자리, double은 15자리까지 표현할 수 있다. 이 떄 소수점 아래 자리 몇까지 오차없이 표현할 수 있는지가 정밀도를 뜻하는데 double이 float보다 정밀도가 높다 할수 있다.
따라서 실무에서 실수를 표현할 때는 보통 정밀도가 더 높음 double을 사용한다.
9. 상수란 무엇이며 변수와의 차이는?
상수란 변하지 않는 수를 말한다.
자바에서는 값을 딱 한 번만 할당할 수 있는 것을 상수라고 한다. 그래서 할당된 값은 변경할 수 없다.
상수를 표현할 때는 자료형 앞에 final을 붙인다.
final int MAX_SIZE = 180;
final char CONST_CHAR ='상';
변수는 상수와 다르게 변하는 수를 말한다. 따라서 변수는 상수와 다르게 할당한 값을 변경할 수 있다.
public class Constants {
public static void main(String[] args) {
final int MAX_SIZE = 180;
final int CONST_ASSIGNED;
CONST_ASSIGNED = 12;
MAX_SIZE = 250;
System.out.println(MAX_SIZE); // 오류가 발생하며 출력되지 않음
System.out.println(CONST_ASSIGNED); // 12
int num1 = 30;
num1 = 500;
System.out.println(num1); // 500
10. 초기화란?
변수 선언 후 값을 처음 할당하는 것을 초기화라 한다.
11. 리터럴이란?
리터럴은 데이터(입력된 값) 그 자체를 말한다. 변수에 넣는 변하지 않는 데이터를 의미하는 것이다.
final int num = 10;
위 코드에서 num은 상수, 리터럴은 10이다.
즉 상수는 변하지 않는 변수를 의미하며 메모리 위치(값이 저장되는 위치)를 말하며, 리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치 안의 값)을 의미한다.
12. 32비트 시스템에서 최대 사용 할수 있는 메모리 양은?
32비트는 컴퓨터 CPU(중앙 처리 장치)가 데이터를 처리할 때 사용하는 ‘레지스터’의 크기를 말한다. 레지스터는 극히 소량의 데이터나 처리 중인 중간 결과를 일시적으로 기억해 두는 고속의 전용 영역을 말한다.
32비트는 물리적으로 4294967296 주소 공간이 존재하며 1주소당 1byte를 할당한다. 따라서 32bit OS에서 사용할 수 있는 메모리는 4GB이다.
<프로그램의 실행 원리, 순서>
1. .exe(binary)파일을 하드 디스트에 저장한다. (설치)
2. OS(운영체제)가 실행을 위해 파일을 메인 메모리(ram)에 올림, 적재(load) : 메모리에서는 주소(바이트 단위)로 관리됨
3. 메모리에서 CPU로 전송(OS가 64bit인지 32bit인지에 따라 한번에 전송하는 양이 결정됨 : 폰 노이만 구조)
4. CPU가 연산을 실행