ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210929 / 진수, 변수, 부동 소수점 방식, 문자형, 논리형, 상수, 리터럴, 형변환
    개발자 수업/Java 2021. 9. 29. 23:36

    1. 컴퓨터에서 자료 표현하기
        1) 2진수로 표현
            - 0과 1로만 데이터를 저장함
            - bit(1비트) : 컴퓨터가 표현하는 데이터의 최소 단위로 2진수 하나의 값을 저장할 수 있는 메모리의 크기
            - byte(바이트) : 1byte = 8bit

        2) 2진수와 10진수
            10진수  0   1   2   3   4   5   6     7     8      9      10
            2진수   0   1   10  11  100 101 110   111   1000   1001   1010

        3) 2진수와 8진수 16진수
            10진수  0   1   2   3   4   5   6     7     8      9      10      11      12     13      14       15      16  
            2진수   0   1   10  11  100 101 110   111   1000   1001   1010    1011
            8진수   0   1   2   3   4   5   6     7     10     11     12      13      14     15      16       17      20
            16진수  0   1   2   3   4   5   6     7     8      9      A       B       C      D       E        F       10

    package kr.co.ezenac.variable;
    
    public class VarTest {
    
    	public static void main(String[] args) {
    		int num = 10;						// 10진수(Decimal)
    		int bNum = 0B1010;					// 2진수(Binary)
    		int oNum = 012;						// 8진수(Octal)
    		int xNum = 0XA;						// 16진수(Hexadecimal)
    		
    		System.out.println(num);
    		System.out.println(bNum);
    		System.out.println(oNum);
    		System.out.println(xNum);
    	}
    }

     


        4) 8비트로 5를 표현
            00000101
            - 첫 번째 숫자는 부호비트(MSB)

        5) 비트로 나타낼 수 있는 수의 범위
            - 한 개의 비트로 나타낼 수 있는 수 : 0, 1 (2개)
            - 두 개의 비트로 나타낼 수 있는 수 : 00, 01, 10, 11 (4개)
            - 세 개의 비트로 나타낼 수 있는 수 : 000, 001, 010, 011, 100, 101, 110, 111 (8개)

    2. 변수(Variable)는 언제 쓰는가
        1) 프로그램에서는 항상 변하는 값을 나타낼 필요가 있음
        2) 표현하려는 수에 맞는 데이터 타입(자료형)을 이용하여 변수를 선언

    3. 변수 이름
        1) 영문자(대문자, 소문자)나 숫자를 사용, 특수문자 중 _와 $만 사용 가능
        2) 시작은 숫자로 할 수 없음
        3) 예약어는 사용할 수 없음
        4) 용도에 맞고 가독성이 좋게 만드는 것이 좋음
            ex) int ns 보다는 numberOfStudent로

    4. 기본 자료형
                  정수형  문자형  실수형   논리형
        1바이트 byte                         boolean
        2바이트 short    char    
        4바이트 int                 float
        8바이트 long              double

    5. 정수 자료형 수의 범위와 용도
        자료형  바이트 크기   수의 범위                용도
        byte       1          -2^7 ~ 2^7-1       1바이트 단위의 자료형 동영상, 음악파일, 실행파일의 자료를 처리할 때 사용
        short      2        -2^15 ~ 2^15-        2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용
        int         4        -2^31 ~ 2^31-1          정수에 대한 기본 자료형
        long       8       -2^63 ~ 2^63-1          8바이트 자료형, 숫자의 뒤에 알파벳 L 또는 l을 써서 long 자료형으로 처리
                        (부호 비트 한 자리를 빼서)

    package kr.co.ezenac.variable;
    
    public class VarTest02 {
    
    	public static void main(String[] args) {
    		byte b1 = 127;
    		//byte b2 = b1 + 2;							// 오버 플로우(129)
    		byte b2 = (byte)(b1 + 2);					// 강재 캐스팅
    		
    		System.out.println("강제 캐스팅 후 : " + b2);	// -128 ~ 127 의 사이클로 돌아서 출력돼서 -127
    		
    		//int num = 12345678900;
    		long lnum = 12345678900L;					// L써서 타입 통일
    		
    		double dnum = 3.14;
    		float fnum = 3.14F;							// F써서 타입 통일
    		
    		int i1 = b1;								// 자동 캐스팅 (형변환 코드(int) 생략가능)
    		System.out.println("자동 캐스팅 후 : " + i1);
    		
    		int i2 = 350;
    		b1 = (byte)i2;								// 큰 바이트 -> 작은 바이트 (데이터 손실 일어남 => 원하지 않는 값 나옴)
    		System.out.println(b1);
    		
    		int i3 = 100;
    		String str = "200" + i3;
    		System.out.println(str);
    		
    		double dNum = 1.2;
    		float fNum = 0.9F;
    		int iNum1 = (int)dNum + (int)fNum;			// 손실 있음
    		int iNum2 = (int)(dNum+fNum);
    		System.out.println(iNum1);					// 1
    		System.out.println(iNum2);					// 2
    	}
    }


    6. int로 10을 표현 (32비트)
        000000000000000000000000000001010
        맨 앞자리는 부호비트

    7. 부동 소수점 방식
        1) 실수는 정수보다 정밀하기 때문에 다른 방식으로 표현해야 함
        2) 실수값 0.1 표현
            - 1.0 * 10^-1
            1.0은 가수, 10은 밑수, -1은 지수
            밑수는 2, 10, 16 등을 주로 사용
        3) 지수부와 가수부로 표현함
        4) 0.2 표현
            - 0.4 * 2^-1
            - 1.6 * 2^-3
        5) float형과 double형
            - float형
              부호비트 + 지수부 8비트 + 가수부 23비트
            - double형
              부호비트 + 지수부 11비트 + 가수부 52비트
        
    8. 문자형
        1) 문자도 정수로 표현함
        2) 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의
            A는 65
        3) 문자세트(Character Set)
            - 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것
            - ASCII code : 알파벳과 숫자, 특수문자 등을 1바이트에 표현하는 데 사용하는 문자세트

            - euc-kr
            - UNICODE : 전 세계 표준으로 만든 문자 세트
                utf-8 : 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
                utf-16: 2바이트로 문자를 표현
            - 문자를 숫자로 변환한 값의 세트
        4) 자바는 문자를 나타내기 위해 전 세계 표준인 UNICODE를 사용
        5) encoding : 문자가 숫자로 변환되는 것 ( A -> 65 )
           decoding : 숫자가 다시 문자로 변환되는 것 ( 65 -> A )

    package kr.co.ezenac.variable;
    
    public class ChracterTest {
    
    	public static void main(String[] args) {
    		char ch1 = 'A';
    		System.out.println(ch1);
    		System.out.println((int)ch1);
    		
    		char ch2 = 'B';
    		System.out.println(ch2);
    		System.out.println((int)ch2);
    		
    		char ch3 = '한';
    		char ch4 = '\uD55C';				// \u는 유니코드라는 뜻
    		System.out.println(ch3);
    		System.out.println(ch4);
    	}
    
    }



    9. 논리형
        1) true(참), false(거짓) 두 가지만 나타냄
        2) 1바이트를 사용

    10. 지역 변수 자료형 없이 사용하기(java 10부터 가능)
        1) 추론 가능한 변수에 대한 자료형을 선언하지 않음
        2) 한 번 선언하여 추론된 변수는 다른 타입의 값을 대입할 수 없음
        3) 지역 변수만 사용 가능

    package kr.co.ezenac.variable;
    
    public class LocalVariableTypeTest {
    
    	public static void main(String[] args) {
    		
    		var i = 10;
    		var j = 10.0;
    		var str = "hello";
    		
    		System.out.println(i);
    		System.out.println(j);
    		System.out.println(str);
    
    		str = "test";
    		//str = 3; 은 불가능함 (문자형이기 때문에)
    				
    	}
    }



    11. 변하지 않는 상수(constant)
        1) 원주율 3.14, 1년 12개월 등
        2) final 예약어를 사용하여 선언

    package kr.co.ezenac.variable;
    
    /*
     * 상수(변하지 않는 값)는 선언과 동시에 초기화를 한 후,
     * 다시 그 상수값을 변경시키는 코드가 들어가면 안 됨
     */
    
    public class ConstantTest {
    
    	public static void main(String[] args) {
    		final int MAX_NUM = 100;
    		final int MIN_NUM;		// 값을 초기화 안하면 오류남
    		
    		MIN_NUM = 0;
    		
    		System.out.println(MAX_NUM);
    		System.out.println(MIN_NUM);
    		
    		// MAX_NUM = 1000; 재할당이 불가능해서 오류남
    	}
    }



    12. 리터럴(literal)
        1) 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻함

    13. 형변환(Type conversion)
        1) 서로 다른 자료형 간에 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것
        2) 묵시적 형변환(implicit type conversion, 자동 형변환)과 명시적 형변환(explicit type conversion, 강제 형변환)이 있음
        3) 바이트 크기가 작은 자료형에서 큰 자료형으로 형변환은 자동으로 이루어짐
        4) 덜 정밀한 자료형에서 더 정밀한 자료형으로 형변환은 자동으로 이루어짐 (정수->실수)
        5) 문자열 + any type => 문자열 
           any type + 문자열 => 문자열
        6) 정수와 실수 간의 캐스팅
            - 저장방식이 다르기 때문에 데이터 손실 반드시 일어남
            - 명시적 캐스팅 코드가 들어가야함

    package kr.co.ezenac.variable;
    
    import java.util.Scanner;
    
    public class ScannerTest {
    
    	public static void main(String[] args) {
    		
    		
    		Scanner scan = new Scanner(System.in);
    		
    		/*
    		System.out.print("정수 한 자리 입력: ");
    		int num = scan.nextInt();
    		System.out.println("사용자로부터 입력받은 숫자 : " + num);
    		
    		System.out.print("실수 한 자리 입력 : ");
    		double dnum = scan.nextDouble();
    		System.out.println("사용자로부터 입력받은 숫자 : " + dnum);
    		*/
    		
    		/*
    		 * next() : 공백을 기준으로 문자열 입력 -> 단어를 입력 시 사용
    		 * nextLine() : 엔터키를 입력할 때까지 문자열을 입력 -> 문장을 입력 시 사용
    		 */
    
    		System.out.print("문자열 입력 : ");
    		String str = scan.nextLine();
    		System.out.println("사용자로부터 입력받은 문자열 : " + str);
    
    		System.out.print("문자열 입력(숫자) : ");
    		int result = 100;
    		String num2 = scan.nextLine();
    		
    		/*
    		 * Integer.parseInt() : 문자열로 입력받은 숫자들을 문자열이 아니라 숫자로 바꿔주는 역할을 하는 메서드
    		 */
    		
    		int temp = Integer.parseInt(num2);
    		
    		int total = result + temp;
    		System.out.println("연산 결과 : " + total);
    		
    		
    		scan.close();
    
    	}
    }

    댓글