[자바퀴즈] 퀴즈 3
1. 키워드란 무엇인가?
- 자바에서 기본적으로 정의내리고 사용하는 단어, 예약어
- 자바의 키워드는 변수나, 메소드, 클래스, 식별자의 이름으로 사용할 수 없다
- 대표적인 키워드의 예로는 8개의 자료형, final, 메인함수에 사용되는 public, statci, void, class, if, for 등이 있다
(더 많은 키워드 확인가능 ▶ https://www.w3schools.com/java/java_ref_keywords.asp )
2. 2의 보수법이란?
- 2의 보수법이란 음의정수를 표현할때 사용하는 방법
3. 컴퓨터에서 음의 정수 표현방법에 대하여 설명하시오
- 양의 정수를 이진수로 표현된 값에 1의 보수를 취한 후 1을 더해준다
1을 더해준 값과 양의정수인 이진수를 더하면 0이 되는 원리
4. -5가 컴퓨터에서의 2진수 값을 나타내시오.
- -5의 2진수 값은 2의 보수법에 의해 구한 결과로 ‘11111011’이 나온다
계산방법은 다음과 같다. ```java +5: 00000101 +5의 1의 보수: 11111010 1을 더함(+5의 2의 보수): 11111011
+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. 리터럴이란 무엇인가요?
- 리터럴은 상수이며 값을 다이렉트로 메모리에 할당하는것
리터럴은 정수일때 int 실수일때 double을 디폴트값으로 정한다
11. 아래의 내용이 에러가 나는 이유와 수정방법은?
System.out.println(3147483647 + 3147483648);
- 값이 int의 범위를 넘었기 때문에 long으로 명시해줘야하는데 그렇지 않았기 때문에 에러가 난 것
System.out.println(3147483647L + 3147483648L); long 타입을 기재해서 에러를 잡으면 된다
12. 자동 형변환과 명시적 형변환에 대하여 설명하시오
- 연산을 할때는 값의 ‘형’을 반드시 같게 만들어줘야한다 같지 않을 때 형 변환이 일어나는데
자동형변환은 자동으로 형을 변환시켜주는것이고 명시적 형변환은 개발자가 강제적으로 형을 변환시켜주는것
형변환은 (자료형크기x 범위o)크고/소수점 보존하는 방향으로 이루어진다
13. 아래의 에러가 나는 이유를 설명하고 수정하시오.
int a = 3;
int b = 4;
double result = a / b;
System.out.println(result);
- 값을 담는 범위가 int 보다 double이 더 큰데 int 값을 double로 담으려고 해서
- 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. 이스퀘이프 시퀀스의 종료를 나열하고 기능을 설명하시오
- ‘\b’ : 커서 백스페이스
‘\t’ : tap
‘\n’ : 개행
‘\r’ : 커서를 맨앞으로 옮기고 맨앞값을 지우고 개행
‘" ‘ : 쌍따옴표를 넣어서 출력
15. 아래의 출력결과를 확인하고 왜 130이 나오는지 설명하시오
System.out.println('A' + 'A');
==============================
130
A는 그 자체로 리터럴이고 이 리터럴은 CPU에게 보내야한다
메모리에 올리려면 방을만들어야하고 데이터타입을 정해줘야한다
A는 문자이기 때문에 char라는 타입에 방을 만든다
char는 int 보다 작은 범위 따라서 정수형으로 인식한것 (참조.형변환 표)
★자동으로 형이 변환됨 char → int
int ‘A’ + int ‘A’ ; 65 + 65가되면서 값을 뿌리게 된다
아스키코드에서 대입해보면 문자 A는 값 6
- B에 대한 값을 뿌리시오 ```java // 방법1. char ch = ‘B’; System.out.println((int)ch);
//방법2. char ch = ‘B’; System.out.println(0+ch); ```