티스토리 뷰

1.문자가 뿌려지는 원리를 설명해 보시오.


컴퓨터에 보이는 모든 문자와 글자는 숫자 값이 존재한다. 
즉, 구현되는 문자값 별로 일 대 일 대응되는 고유 숫자가 있으며 이를 [코드표]라고 부른다. 
A, * 와 같은 것을 [폰트]라고 부르며 이 폰트를 구현하기 위해 픽셀들을 찍고 각 픽셀 문자별로 숫자값을 부여했다.

 

char ch= 'a'

출력 결과: a

 

데이터 타입에 맞춰서 표를 찾아 A(문자) > 숫자 인코딩 / 숫자 > A(문자) 디코딩 된다.

a=97, A=65와 같이 1:1 매칭으로 약속되어있음 (표준)

"_" 공백(sp) 32, 0 =34, 1=3

ASK2코드, Unicode 표를 참고한다.

 

참고:

인코딩 - a 라는 문자가 char 타입이라 컴퓨터가 알아 들을 수 있도록 ASK2코드(유니코드) 표를 참고하여

이진수로 변환되어 컴퓨터(CPU)에 전달된다.

 

디코딩 - 컴퓨터가 가진 이진수를 데이터 타입을 참고하여 같은 값을 가지고 있는 폰트를 찾아 화면에 출력한다.

왜 문자 '1'의 코드 값 34가 메모리에 들어갔는데 출력할 때 다시 1이 나오는지는 알아서 고민해보자 ㅋㅋ

 


2. ASCII(아스키 코드)란?


아스키 코드란 미국정보교환표준부호(American Standard Code for Information Interchange)의 약자로 1960년 10월 미국에서 개발이 시작되어 1963년 표준화 초판을 발간한 대표적인 알파벳 문자 인코딩이다. 아스키는 총 128개로 이루어져 있으며 대부분 문자 인코딩의 조상급 코드이다. 
아스키 또한 컴퓨터에 구현되는 문자로 알파벳 별로 고유 숫자가 존재하며 이진법, 팔진법, 십진법, 십육진법이 있다.
♧주요 아스키코드: 65번 A
♧주의 아스키코드: 32번 sp (스페이스) → 빈 칸을 띄우는 것조차 32번이라는 숫자를 부여하여 문자 취급을 한다.

 


3. Java Keywords: 키워드란?


자바 예약어를 뜻하며 지정된 목적 이외의 용도로 사용할 수 없다.
즉, 사용자가 정의하는 변수, 메소드, 클래스나 식별자의 이름으로 사용하지 않는 것이다.
ex)기본 자료형: boolen, byte, char, short, int, long, float, double

우리가 아는 8개의 자료형 boolean, char, byte, short, int, long, float, double도 여기에 포함되며

상수를 나타내는 final, 메인함수에 사용되는 public, static, void 그리고 class, if, for, while, else 등이 있다.

자바 키워드는 이거보다 더 많다.


4. 컴퓨터에서 음의 정수 표현 방법


음의 정수를 표현하는 방법은 양의 정수의 이진수 표현에 2의 보수를 취하면 된다. 즉, 2의 보수법으로 음의 정수를 구할 수 있다.



5. -5의 '컴퓨터에서의 2진수 값'을 나타내시오.


양의 정수의 이진수 표현에 2의 보수를 취한 것이 음의 정수의 이진수 값이다. 따라서 -5의 값을 구하기 위해 우선 5의 이진수를 구해야 한다.

   2) 5
   2  2....1
      1....0
    
5의 이진수는 101이다. _ _ _ _ _ 1 0 1의 1의 보수는 1 1 1 1 1 0 1 0 이다. (1과 0 반전)
2의 보수는 1의 보수에서 1을 더하면 된다. 즉 5의 이진수의 2의 보수는 11111011이며 -5의 2진수 값이다.
      


6. 실수에서 오차가 생기는 원인은?


실수는 소숫점 아래 무한한 숫자들이 존재하고 그것의 근사값을 컴퓨터 화면에 구현한다. 

컴퓨터에 연산을 위해서는 무한한 실수를 유한한 메모리에 올리는 과정이 필수적이다. 그래서 실수 전체를 다 담을 수 없기 때문에 실수의 범위를 정해서 최대값과 최소값을 주고 그 사이에 표현할 수 있는 값을 미리 지정해 두고 근사값으로 사용한다. 예를 들면 double (-10^324~10^308) 의 범위가 정해져 있다.

 

따라서 정수와 달리 실수는 오차없이 표현하는 것은 불가하다.

 


7. 실수의 표현법(고정소수법)을 설명하시오

 

정수를 이진수로 표현하는 방법과 실수를 이진수로 표현하는 방법이 판이하게 다르기 때문에 정수와 실수의 데이터 타입을 나눌 수 밖에 없다.

 

고정소수점

: 소수점이 고정되어 있다는 의미이다.

1.0124,0.5421, 0.1234, 0.1234, 0.2648

 

 


8. 실수의 표현법(부동소수법)을 설명하시오.


실수를 표현하기 위해서는 정밀도를 낮추고 표현 범위 값을 넓히는 방법으로 오차를 줄이는데 실수 표현 방법의 기준을 식으로 나타내자면, +-(1.m)*2의 e마이너스 127승이다. 

 

부동소수점

: 소수점이 떠다닌다는 의미이다.

1.123x10^-1, 1.234x 10^-2, 0.1 1x10^-1, 0.001 1x10^-2 .....

3.4e3 -> 3.4 x10^3 (부동소수점) = 3400.0

3.4xe-3 -> 3.4x10^-3 (부동소수점) = 0.0034


9. 정밀도란?


실수의 오차값을 줄이는 것을 뜻한다. 
실수를 표현하는 데이터 타입 float과 double은 소숫점 아래 표현할 수 있는 자리수가 다른다. 
double의 표현 가능 범위가 float보다 넓어 실수값에 대한 오차를 줄이기 위해 double을 더 사용하고 이러한 것을 정밀도라고 한다. 


10. 상수란 무엇이며 변수와의 차이는?


상수(constant)란 고정되어 있는 변하지 않는 데이터 값이고 변수(variable)는 변화가 가능한 수이다.
상수를 설정하면 메모리 값(메모리 위치)를 변경할 수 없다.
개발자들은 대문자로 상수의 이름을 짓는 것이 관례이다.

 

final double PI = 3.141592 처럼 이미 만들어진(정해진) 값이 있어서 누군가 중간에 값을 변경시키면 안되는 것들에 반드시 상수를 사용해야 한다.

 

###특징

 

- 값을 딱 한 번만 할당할 수 있다.

- 한 번 할당된 값은 변경이 불가능하다.

- 키워드 final 선언이 붙는다.

 

### **상수 이름 지을 때 주의할 점**

 

- 상수의 이름은 모두 대문자로 짓는다.

- 둘 이상의 단어로 만들 때에는 언더바(_)로 연결한다. (snake 표기법)

 

- 상수 예시 01 : 상수 이름과 초기화

- 상수 예시 02 : 반지름의 넓이가 10인 원의 넓이를 구하는 프로그램


11. 초기화란?


변수 선언 이후 값을 처음 할당하는 것을 뜻한다. 
final이 변수명 앞에 붙으면 초기화를 한 번만 할 수 있으며 변수가 아니라 상수가 된다.

 

//변수의 선언과 초기화 예시

int a = 1; //변수의 선언과 동시에 초기화

char ch = 'a'; //변수의 선언과 동시에 초기화

 

int b; //변수의 선언

b = 5; //초기화

 

//상수의 선언과 초기화 예시

final int MAX_SIZE = 100; //상수의 선언과 동시에 초기화

final char CONST_CHAR = ''; //상수의 선언과 동시에 초기화

 

final int CONST_ASSIGNED; //상수의 선언

CONST_ASSIGNED = 12; //상수의 초기화

 

CONST_ASSIGNED = 30; //에러. 상수는 한번만 값을 할당할 수 있다.


12. 리터럴이란?

 

리터럴(Literals) 자료형을 기반으로 표현이 되는 상수를 말한다.


소수 코드의 고정된 값을 대표하는 용어. 값이 변하지 않는 데이터(메모리 위치 안의값)를 의미한다. 
즉, 데이터 값 그 자체이다. 변수에 넣는 변하지 않는 데이터.
정수는 무조건 int형으로 인식하기로 약속하였는데 int num1 = 3 + 6; 에서 3과 6은 정수형 리터럴이다.
double num2 = 3.3 + 4.5;에서 3.3과 4.5는 실수형 리터럴이다.

int num = 5 + 7; //5 7 '정수형 리터럴'

double num2 = 3.3 + 4.5; //- 3.3 4.5 '실수형 리터럴'

char ch = 'A' //A '문자형 리터럴'

 

 

위에서 5 7, 3.3, 4.5 모두 연산을 위해서 CPU로 보내기 위해 메모리에 올리는 과정이 동반된다. 그렇기 때문에 5 7 int형으로 4byte의 메모리 공간을 할당받게 되고 3.3 4.5 double형으로 8byte의 메모리 공간을 할당받게 된다. 이렇게 메모리 공간을 확보한 정수와 실수 모두는 메모리 공간에 값이 기록되면 값이 변하지 않기 때문에 리터럴 이라고 표현한다.

 

(리터럴이라는 표현은 상수라는 표현으로 대신하는 경우가 많다.)

 

- 참고

 

정수형 리터럴(예시)

 

 

//long - L 써야함

long l = 3147483647L;

 

sysotu(3147483647 + 3147483647);

//=> integer number too large 오류메세지 출력

 

//이진수로 넣으려면 -OB또는 ob붙여서 이진수 표현

byte seven = 0B111; //10진수로 7

int num205 = 0B11001101;

 

//원하는 위치에 언더바를 넣을 수 있다.

//언더바는 가독성을 위해 넣어주는 것일 뿐, 아무 영향이 없다.

int num = 100_000_000;

int num = 12_34_56_78_90;

 

실수형 리터럴(예시)

 

sysout(3.0004999 + 2.0004999);

sysout(3.0004999D + 2.0004999d);

//실수는 기본 double형이다. double임을 명시하기 위해 d또는D삽입 (안넣어도 됨)

 

sysout(3.0004999F + 2.0004999f);

//실수형 상수를 float형으로 표현하려면 f F삽입 (!)

 

Boolean, 문자형 상수 (예시)

true false: 부울형 상수 (boolean)

 

'' '' 'A' 문자형상수


13. 32비트 시스템에서 최대 사용할 수 있는 메모리의 양은? and 왜? 


윈도우 32bit 버전은 이론적으론 메모리 램 4기가까지 인식을 한다. 하지만 기본 램 4기가인 요즘 컴퓨터에 설치해보면 3기가 내외로 나온다. 1기가 정도 손실이 발생한다. 이유는 일단 비디오 메모리, 내부 장치 등도 램에 할당해주면서 그만큼 발생!

비트로 나타낼 수 있는 숫자는 0, 1로 두개이므로, 32비트로 나타낼 수 있는 숫자의 갯수는 2의 32승으로 4,294,967,296개다. 따라서 32비트는 주소공간으로 4,294,967,296개를 사용할 수 있는데, 주소 공간 하나당 1Byte이므로 2^32B = 4(2^30)B = 4GB의 메모리를 한번에 인식해서 처리한다. 


>> 32비트 시스템의 메모리양은 8기가. 더 달아도 쓸모가 없습니다.




댓글