[자바퀴즈] 퀴즈 3

1. 키워드란 무엇인가?

2. 2의 보수법이란?

3. 컴퓨터에서 음의 정수 표현방법에 대하여 설명하시오

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

+5 : 00000101 -5 : 11111011 0 : 00000000

 
 
<br>

## 5. 실수에서 오차가 생기는 원인은 무엇인가?
- 실수는 0~1 사이에도 무수한 실수사 존재한다 <br>
실수는 무한한데 무한한 실수를 유한한 메모리에 올리려니 한계가 발생 <br>
따라서 실수의 범위를 정해서 최대값과 최소값을 주고 그 사이에 표현할 수 있는 값을 미리 지정해 두고 근사값으로 사용한다<br>
근사값을 사용하기 때문에 오차가 발생할 수 밖에 없다
<br>

## 6. 실수의 표현법은(고정소수법, 부동소수법)을 설명하시오.
- 고정소수법은 소수점이 고정된 것 / 부동소수법은 소수점이 떠다니는 것 <br>
(부동소수법) 3.4e3 -> 3.4 x10^3 (부동소수점) = 3400.0 <br>
            3.4xe-3 -> 3.4x10^-3 (부동소수점) = 0.0034

  - 왜3.4e3 이런 방식으로 컴퓨터에 쓸까? <br>
    컴퓨터에 10^3(지수 부분)을 표현하지 못해서 밑10을 e로 바꾸면서 입력이 가능하게 만들었다. (폰트로 컴퓨터에 입력이 안된다.)
<br>

## 7. 정밀도란 무엇인가요?
- 오차없이 값을 얼마나 정확하게 출력하는지에 대한 기준 <br>
float은 소수점이하 6자리, double은 소수점이라 15자리까지 오류없이 나온다 <br> 
단, double이라 하더라도 연산을 하게되면 소수점 이하 3자리부터 오류가 나기도함 <br>
정밀도 때문에 실수는 double은 주로 사용한다 <br>
반드시 프로그램 전에 소수점 몇 째 자리에서 반올림 할지 실무에서는 협의 해야 한다 (확답을 반드시 받아야 함)
<br>

## 8. 상수란 무엇이며 변수와의 차이는?
- 상수란 변수와 달리 변하지 않는 수이다 <br>
상수는 값을 한번 초기화시키면 그 이후에 값을 선언할 수 없다 <br>
키워드 final로 사용하고 고정적으로 변하지않고 쓰는 값에 활용한다 <br> 
또한 변수는 변수명을 소문자로 상수는 상수명을 모두 대문자로 사용한다는 차이가 있다 <br> 
둘 이상의 단어로 만들 때에는 언더바(_)로 연결한다 (snake 표기법)
<br>

## 9. 초기화란 무엇인가?
- 초기화란 값을 처음으로 메모리에 할당하는 것
- 변수의 경우 초기화 이후에 값을 넣어 변화시킬 수 있으나, 상수는 초기화 이후 값을 넣거나 변경시킬 수 없다.
```java
//변수의 선언과 초기화 예시
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;		     //에러. 상수는 한번만 값을 할당할 수 있다.


10. 리터럴이란 무엇인가요?

11. 아래의 내용이 에러가 나는 이유와 수정방법은?

System.out.println(3147483647 + 3147483648);

12. 자동 형변환과 명시적 형변환에 대하여 설명하시오

13. 아래의 에러가 나는 이유를 설명하고 수정하시오.

int a = 3;
int b = 4;
    	
double result = a / b;
    	
System.out.println(result);
  1. 값을 담는 범위가 int 보다 double이 더 큰데 int 값을 double로 담으려고 해서
  2. a,b는 정수인데 값을 나누게 되면 정수라는 특성상 소수점 뒤를 버리고 결과값을 도출하게 됨
    따라서 정확한 결과값을 도출할 수 없다 그래서 double로 강제형변환을 시켜줘야함
01
int a = 3;
int b = 4;
    	
double result = (double)a / b;
    	
System.out.println(result);

02
int a = 3;
int b = 4;
    	
double result = a / (double)b;
    	
System.out.println(result);


14. 이스퀘이프 시퀀스의 종료를 나열하고 기능을 설명하시오

15. 아래의 출력결과를 확인하고 왜 130이 나오는지 설명하시오

System.out.println('A' + 'A');
==============================
130

A는 그 자체로 리터럴이고 이 리터럴은 CPU에게 보내야한다
메모리에 올리려면 방을만들어야하고 데이터타입을 정해줘야한다
A는 문자이기 때문에 char라는 타입에 방을 만든다
char는 int 보다 작은 범위 따라서 정수형으로 인식한것 (참조.형변환 표)
★자동으로 형이 변환됨 char → int
int ‘A’ + int ‘A’ ; 65 + 65가되면서 값을 뿌리게 된다
아스키코드에서 대입해보면 문자 A는 값 6

//방법2. char ch = ‘B’; System.out.println(0+ch); ```