[Java]변수(2)

2023. 5. 23. 11:06·Programming
반응형

값의 기본형 참조형

  • 기본형(Primitive type): 오직 8개

    • 문자: char(하나의 문자만을 저장할 수 있음)

    • 숫자

      • 정수: byte(1/이진데이터), short(2/c언어 호환. 안쓰임), int(4/자주사용), long(8/아주 큰 정수)
      • 실수: float, double
    • 논리: boolean(true/false 만 있으며, 조건식 / 논리적 계산에 사용)

      종류 / 크기(byte) 1 2 4 8
      논리형 boolean
      문자형 char(유니코드: 2byte)
      정수형 byte short int long
      실수형 float
      (부동소수점: floating point) double
    • 실제 값 저장

    • int, double → default 타입

    • 표현 범위

      • 예시: byte

      • byte b; // byte = 1 byte(8bit) 이 중 1bit = 2진수 한자리(0/1) b= 3; // 실제로는 10진수가 아닌 2진수로 저장됨

      • bit

      • 2 bit = 4개 표현 가능(2^2) n bit로 표현할 수 있는 값의 개수 = 2^n개 n bit로 표현할 수 있는 부호없는 정수 범위 = 0~2^n-1 (0부터 시작하기 때문) n bit로 표현할 수 있는 부호있는 정수 범위 = -2^n-1 ~ 2^n-1 - 1 ex) n=8인 경우 -2^7 ~ 2^7-1 (-128~127)

      • byte

      • byte -2^7 ~2^7-1 (맨 왼쪽 비트를 값의 부호를 나타내는데 사용(부호비트 혹은 sign bit. 0=양수, 1=음수) -> 실제 값 표현에는 7비트 사용

      • short

      • -2^15~2^15-1 (S / 15 bit)

      • char

      • 0~2^16 - 1 (문자 코드가 2진수로 저장됨) ( 16 bit )

      • int

      • -2^31 ~ 2^31-1 // -20억 ~ 20억 정도 (S / 31 bit)

      • long

      • -2^63~2^63-1 // 800경 정도(넘어갈 경우 BigInteger 클래스 사용) 64bit=8byte=(S / 63bit)

      • float(32bit, 4byte)

        • 오차가 발생함 → 정밀도가 중요(몇자리까지 정확하게 표현할 수 있는지 = 7자리)
        • ```

        1.4E-45 ~ 3.4E38 (E38 = 10^38)// 표현할 수 없는 범위
        1.4E-45 ~ 1.4E45// 정밀도 (가수에 따라 달라짐)
        10^7 < 2^24 < 10^8

      • ( S / E(8) / M(23) )
        ( 부호 / 지수 / 가수 )
        3.4E38 중 3.4 = 가수, E38 = 지수

      • // 사용 가능한 값의 범위
        -3.4E38 ~ -1.4E-45
        1.4E-45 ~ 3.4E38

      • double(64bit = 8 byte)

        • 정밀도 15자리 ⇒ 정밀도 중요한 경우 double 사용
        • ```

        4.9E-324 ~ 1.8E308

      • ( S / E(11) / M(52) )

  • 참조형(Reference type)

    • 기본형을 제외한 나머지(String, System 등)
    • 수가 정해져 있지 않음(편의상 새로 만들 수 있음)
    • 메모리 주소 저장(4 type(40억, 4기가 정도 메모리 다룰 수 있음. 32bit JVM) 또는 8 byte(64bit JVM: 160경 byte, 1600만 TB))
    • Date today; // 참조형 변수 today에 선언 today = new Date(); // today에 객체 주소 저장

형식화된 출력 - printf()

  • println()의 단점

    • 출력 형식 지정 불가

      1. 실수 자리수 조절 불가: 소수점 n 자리만 출력하려면?

         System.out.println(10/3); // 3이 출력(정수/정수=정수
        
         System.out.println(10.0/3);) // 3.3333333333333335
      2. 10진수로만 출력: 8진수, 16진수로 출력하려면?

         System.out.printf("%.2f", 10.0/3); // 3.33
                 System.out.printf("%d", 0x1A); // 26
                 System.out.printf("%x", 0x1A); // 1A
  • printf()의 지시자

|  | 지시자 | 설명 |
| --- | --- | --- |
| 논리 | %b | 불리언(boolean) 형식으로 출력 |
| 정수 | %d | 10진(decimal) 정수의 형식으로 출력 |
| 정수 | %o | 8진(octal) 정수의 형식으로 출력 |
| 정수 | %x, %X | 16진(hexa-decimal) 정수의 형식으로 출력 |
| 실수 | %f | 부동 소수점(floating-point)형식으로 출력 |
| 실수 | %e, %E | 지수(exponent) 표현식의 형식으로 출력 |
| 문자 | %c | 문자(character)로 출력 |
| 문자 | %s | 문자열(string)으로 출력 |
- Java API → Formatter 클래스 확인

```
printf("age:%d year:%d\n", 14, 2017);

// 출력
age: 14 year:2027\n이 화면에 출력됨
// \n = 개행문자 (OS마다 표기가 다를 수 있음 %n은 OS를 가리지 않아 사용 권장)
```

- 정수를 8, 16진수로 출력

    ```
    %d // 10진수
    %o // 8진수
    %x // 16진수
    Integer.toBinaryString(15); // 2진수
    ```

- 8진수, 16진수에 접두사 붙이기(#)

    ```
    %#d // 15 = 017
    %#o // 15 = 0xf
    %#x // 15 = 0XF
    ```
  • 실수 출력을 위한 지시자 %f → 지수 형식(%e), 간략한 형식(%g)

화면으로부터 입력받기(Scanner)

Scanner

  • 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

  • Scanner 사용

    • import문 추가

        import java.util.*;
    • Scanner 객체의 생성 필수

        Scanner scanner = new Scanner(System.in);
      • System.in: 화면 입력
      • 파일로부터 입력도 받을 수 있음
    • Scanner 객체를 사용

        int num = scanner.nextInt() // 화면에서 입력받은 정수를 num에 저장
        String input = scanner.nextLine() // 화면 입력 내용을 input에 저장
        int num = Integer.parseInt(input) // 문자열(input)을 숫자(num)로 변환
      • 문자 → 숫자: Integer.parseInt
      • 숫자 → 문자: 숫자 + “”

정수형의 오버플로

  • 최대값 + 1 → 최소값

  • 최소값 - 1 → 최대값

  • 오버플로: 표현 가능한 범위를 넘는 것

  • 부호 없는 정수(4bit)

    • 표현 범위: 0~15가 반복
  • 부호 있는 정수(4bit)

    • 표현 범위: -8~7가 반복
  • 예

      short(2byte = 16bit = 2^16 = 65536) -32768~32767
      char(2byte) 0~65535
  • 10진수

    • 09 (0(10-1))
    • 0099 (0(10^2-1))
    • 000999 (0(10^3-1))
    • 00009999 (0(10^4-1))
  • 2진수

    • 01 (0(2-1))
    • 0011 (0(2^2-1))
    • 000111 (0(2^3-1))

n비트로 표현할 수 있는 정수 개수: 2^n개

  • n=16일 경우

    short타입의 표현 범위: -2^15 ~ 2^15-1

    char 타입의 표현 범위: 0~(2^16-1)

타입간 변환

  • 문자 - 숫자
    • 숫자 → 문자: 3 + ‘0’
    • 문자 → 숫자: 3 - ‘0’
  • 문자열로의 변환
    • 숫자 → 문자열: 3 + “” (빈 문자열)
    • 문자 → 문자열: ‘3’ + “” (빈 문자열)
    • 문자열 → 숫자: Integer.parseInt(”3”)
    • 문자열 → 숫자: Double.parseDouble(”3.14”)
    • 문자열 → 문자: “3”.charAt(0)
저작자표시 비영리 동일조건 (새창열림)

'Programming' 카테고리의 다른 글

[Java]연산자(2)  (0) 2023.05.25
[Java]연산자(1)  (0) 2023.05.25
[Java]변수  (0) 2023.05.22
자료구조: Heap (백준 24174번)  (0) 2023.05.15
자료구조: Linked List (백준 1158번)  (1) 2023.05.15
'Programming' 카테고리의 다른 글
  • [Java]연산자(2)
  • [Java]연산자(1)
  • [Java]변수
  • 자료구조: Heap (백준 24174번)
Canary_카나리아
Canary_카나리아
어쩌다 데브옵스 엔지니어가 된 문과생의 기록용 블로그
    반응형
  • Canary_카나리아
    release: canary
    Canary_카나리아
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • DevOps (67)
      • Programming (28)
      • Certifications (3)
      • ETC (20)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데브옵스엔지니어
    제로베이스
    spring
    NCPprofessional자격증
    java개념
    클라우드자격증
    프로메테우스예제
    Java
    한빛출판네트워크
    kops사용법
    네이버클라우드자격증
    프로메테우스
    NCP자격증
    그라파나
    자바개념
    개발자
    Grafana
    백엔드공부
    Prometheus
    클라우드엔지니어자격증
    백엔드개발
    terraform
    argocd
    NCPassociate자격증
    백엔드스쿨
    네이버클라우드서비스
    ncp서비스
    kops란
    백엔드
    그라파나예제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Canary_카나리아
[Java]변수(2)
상단으로

티스토리툴바