본문 바로가기
코딩/수업 정리

20.11.25 Wed [003]

by 6^6 2020. 11. 25.
728x90

 

 

 

 

변수=변하는수

변수명은 소문자로 시작해야한다. 특수문자($,_제외),숫자로 시작하면 오류남.

키워드는(static, void 등) 변수명으로 사용불가

2진수 음수로 바꾸기 - 자리를 0↔1 바꿔주고 마지막에 1을 더해준다. = 2의보수법 
  int num1=-10; //10앞에 -가 붙으면 2의보수법을 취해서 (앞에 0101 덩어리가 붙어서)나타난다.

 


정밀도 

float f = 0.123456f;//소숫점 6자리까지 
double d = 0.123456789012345d;//소숫점 15자리까지 
실무에서는 소숫점이 나온다면 둘째자리에서 반올림해야 좋다. 오류때문에


타입

왜정수와 실수로 나눠놨을까? 왜 오차가 생길까? 왜 정수와 실수로 나눠놨을까? 실수는 왜 오차가 생길까?  
 -실수하고 정수는 2진수로 표현하는 방법이 다르기때문에 
 -유한한 실수를 무한한 메모리에 넣어야 하기 때문에 가장 가까운 수로 나타난다.

 

short끼리 더했을때 값은 오류?

class Hello{
    public static void main(String[] args) {
        
        byte num1 =11;
        byte num2 =22;
        int result = num1+num2;
    
        System.out.println(result);
                //자바는 32bit(4byte)를 전제로 만듦.
                //선이 32개있는데 int는 32개고 short는 16개임
                //선이 32개면 무조건 32개를 다 써서 보내야함(하드웨어 특성)
                //따라서 byte,short끼리의 연산은 다 오류남
        //해결
        short result = (short)(num1+num2);//형변환
        System.out.println(result);//오류 사라짐

 


상수란?  변하지않는 값 

final int num1 = 10; 같이 쓰이는것.

★★상수 활용법★★
값을 변경시키면 안되는 값은 무조건 상수로 넣는다.

상수는 무조건 대문자로 적어준다

 
class Hello{
    public static void main(String[] args) {
        
        final int MAX_SIZE = 100;
        final char CONST_CHAR = '상';
        final int CONST_ASSIGNED;
        
        CONST_ASSIGNED = 10;
        System.out.println("상수1:"+MAX_SIZE);
        System.out.println("상수2:"+CONST_CHAR);
        System.out.println("상수3:"+CONST_ASSIGNED);
        
        
        //선언= int num;
        //초기화= num = 10; 값을 새로 넣는것.
        
        final double PI = 3.14;
        //PI = 3.1415; //오류-why?상수는 값을 한번 대입하게 되면 
                        //그 다음에 그 값을 못바꾼다.(변수와 차이점) 
        //변수는 초기화할 수 있어도 상수는 초기화X
            
        //선언= int num;
        //초기화= num = 10; 값을 새로 넣는것.
                
    }
}

 


리터럴(Literals)-자료형(8개)을 기반으로 표현이 되는 상수 


정수는 무조건 int형으로 인식하게 한다. 
ex) int num1 = 5+7; 연산은 cpu가 함. 따라서 5+7조차도 cpu로 가야함. 메모리를 잡아서 5를 cpu에보내고 7을 보내서 cpu가 계산함.

System.out.println(21억초과되는 연산); //오류남 -해결- System.out.println(22345678901l); 끝에 알파벳l붙이기

0B //10진수 
0 //8진수 
0x //16진수

실수형상수 - 뒤에d또는f를 넣는다.

3.4e3 = e3이 10의 3승 = 3400.0 //3.4e-3도 가능 =0.0034

 


이스케이프 시퀀스(escape sequences)

'\b'   백스페이스 문자  
'\t'   탭 문자  
'\"'   ""안에 ""넣어도 오류X  
'\n'  개행문자(엔터) 
'\r' 캐리지리턴. 스크린커서의 위치를 현재 줄의 처음으로 옮긴다. 개행하지 않는다. 이 기호 다음에 오는 문자를 덮어 쒸운다.

class Hello{
    public static void main(String[] args) {
        
        System.out.println("AB"+'\b'+'C');
        System.out.println("AB"+'\t'+'C');
        System.out.println("AB"+'\n'+'C');
        System.out.println("AB"+'\r'+'C');
    }
}​

 

 


자료 형 변환

데이터타입이 다른것끼리 연산을하면? 더 큰 byte값, 실수값(소수점 보존하는쪽)을 갖고있는 자료형으로 자동형변환된다.

 
class Hello{

        double pi = 3.14;
        //int result = pi; //오류남
        int result = (int)pi; //해결
        System.out.println(result);//강제 형변환 //결과값 3 
    }
}
 

 

명시적 형 변환 - 강제형변환

class Hello{
    public static void main(String[] args) {
        
        int a = 3;
        int b = 4;
     //double result =a/b; //결과값 0.0 -int끼리 나눈값에 double로 형변환 해준거라서.
        double result =(double)a/b;
        System.out.println(result); //해결.한 놈을 double로 형변환해준다. 0.75

    }
}

 

 

오늘의 문제

 

1.키워드란 무엇인가?

=자바의 예약어 static, void 등 변수명으로 사용불가한 것.

 

2.2의 보수법이란?

- 보수(complement)란 두 수의 합이 진법의 밑수가 되게 하는 수를 말한다.

(10진수에서 6의 보수는 4, 7의 보수는 3)

- 컴퓨터에서는 음의 정수를 표현하기 위해서 2의 보수법을 사용한다.

2의 보수는 양수 2진수의 1의 보수를 구한 뒤 거기에 1을 더해 음수를 표현하는 방법을 말한다.

이 때 8비트를 넘어가는 맨 앞자리의 수는 전산적으로 버려주게 된다. 이진수의 1의보수는 비트를 반전시켜 얻을 수 있다. (0→1, 1→0)

 

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

2진수값을 0↔1로 바꿔주고 마지막에 1을 더해준다.

 

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

011

 

5.실수에서 오차가 생기는 원인은 무엇인가?

실수하고 정수는 2진수로 표현하는 방법이 다르기때문에

 

6.실수의 표현법은(고정소수법, 부동소수법)을 설명하시오.

1.0124(고정소수점)

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

 

7.정밀도란 무엇인가요?

계산값의 정확도 float는 소수점 6자리까지, double은 소수점15자리까지 나온다.

 

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

변하지않는 값. 변수는 변하는 값

 

9.초기화란 무엇인가?

값을 새로 넣는 것.

 

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

자료형(8개)을 기반으로 표현이 되는 상수

 

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

System.out.println(3147483647 + 3147483648);

 

이유:int값의 범위를 초과함.

수정방법:long형으로 형변환한다.

System.out.println(3147483647L + 3147483648L);

 

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

자동형변환 - 더 큰 byte값, 실수값(소수점 보존하는쪽)을 갖고있는 자료형으로 자동형변환되는 것.

명시적 형변환-자동 형변환이 안되어서 강제형변환 하는것

 

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

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

 

설명:결과값 0.0 int끼리 나눈값에 double로 형변환 해준거라서.

수정:double result = (double)a/b;

 

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

'\b' - 앞에 있는 글자 지움

'\t' - 탭 문자

'\"' - ""안에 ""넣어도 오류X

'\n' - 개행문자-엔터

'\r' - 다음에 오는 문자를 덮어 씌운다.

 

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

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

 

int형보다 낮은거에 대해서는 하나의 정수형 타입으로 인식한다.

char타입이 들어와도 그 자체를 int로 인식한다.(자동형변환)

'A'의 아스키코드 값이 65여서

 

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

자바 자습  (0) 2020.11.28
20.11.27 Fri [005]  (0) 2020.11.27
20.11.26 Thu [004]  (0) 2020.11.26
20.11.24 Tue [002]  (0) 2020.11.24
20.11.23 Mon [001]  (0) 2020.11.23

댓글