[JAVA 복습] 자바의 자료형과 연산자 - 실수 자료형들, 문자 자료형

seonjeong·2023년 10월 21일
0

Java

목록 보기
23/26
post-thumbnail

실수 자료형들

컴퓨터의 실수 표현 방식

  • 컴퓨터의 실수 표현 방식은 2진수

  • 정수의 경우 2진수로 표현하기 쉽지만, 실수를 2진수로 표현하는 건 복잡

  • 실수를 표현하는 방식

    • 고정소수점(Fixed point) : 정수부와 소수부를 나눠서 미리 각각의 자릿수를 정하여, 고정된 자릿수의 소수를 표현(소수점이 고정)
    • 부동 소수점(Floating point) : 가수부와 지수부로 나누어 표현
  • 고정소수점 방식은 제한된 자릿수로 인해 표현할 수 있는 범위가 매우 작기 때문에 부동소수점 방식이 널리 사용됨

부동소수점의 오차

  • 고정소수점 방식보다 표현할 수 있는 수의 범위는 늘지만, 오차가 존재
  • 무한소수, 순환소수의 경우 표현할 수 있는 비트 수를 넘어가게 되면 손실되는 부분이 생기기 때문
  • 부동소수점 오차 해결을 위해서는 BigDecimal 클래스 사용
double a = 0.1, b = 0.2;

//  ⚠️ 오차가 생김
double c = a + b;  // 0.30000000000000004
boolean bool = 0.1 + 0.2 == 0.3;  // false

실수 자료형

자료형크기
float4바이트
double8바이트
  • doublefloat보다 단순히 범위가 넓은 것이 아니라, 보다 정밀하게 표현 가능
//  float의 최대값과 최소값
float fMin = -Float.MAX_VALUE;  // -3.4028235E38
float fMax = Float.MAX_VALUE;  // 3.4028235E38

//  double의 최대값과 최소값
double dMin = -Double.MAX_VALUE;  // -1.7976931348623157E308
double dMax = Double.MAX_VALUE; // 1.7976931348623157E308

//  최소 절대값
float fAbsMin = Float.MIN_VALUE;  // 1.4E-45
double dAbsMin = Double.MIN_VALUE;  // 4.9E-324

// ⭐ double이 범위도 넓고, 정밀도도 높음 확인
boolean bool1 = Float.MAX_VALUE < Double.MAX_VALUE;  // true
boolean bool2 = Float.MIN_VALUE > Double.MIN_VALUE;  // true
  • float는 뒤에 f또는 F를 붙여 표현
float flt1 = 3.14f;
double dbl1 = 3.14;
  • float에는 double을 담을 수 없음(반대는 가능)
float flt2 = dbl1; // ❌
double dbl2 = flt1;
  • floatlong의 값 담을 수 있음
long lng1 = 123;

float flt3 = lng1;  // 123.0
double dbl3 = lng1;  // 123.0

long lng2 = Long.MAX_VALUE;  // 9223372036854775807

//  ⭐ 큰 수(정확히 표현가능한 한도를 넘어서는)일 경우
//  가능한 최대 정확도로
float flt4 = lng2;  // 9.223372E18
double dbl4 = lng2;  // 9.223372036854776E18
  • float끼리의 연산은 float를 반환하지만 floatdouble의 연산은 double반환
// float끼리의 연산은 float 반환
float flt03 = flt01 + flt02;

//  float과 double의 연산은 double 반환
float flt04 = (flt01 + dbl01);  // ❌
  • 정수 자료형과 실수 자료형의 계산은 실수 반환
int int1 = 5;
float flt1 = 2f;
double dbl1 = 3;
double dbl2 = 7;

int flt2 = int1 / flt1; // ❌
double dbl3 = int1 / dbl1;
double dbl4 = dbl2 / int1;
  • 정수 자료형에 강제로 넣으면 소수부를 버림
float fltNum = 4.567f;
double dblNum = 5.678;

int int2 = (int) fltNum;  // 4
int int3 = (int) dblNum;  // 5
  • 비교연산자 - 정수,실수간 다른 숫자 자료형간 사용 가능
int int1 = 5;
float flt1 = 5f;
double dbl1 = 5.0;
double dbl2 = 7.89;

boolean bool0 = 123 == 123F;  // true

boolean bool1 = int1 == flt1;  // true
boolean bool2 = flt1 == dbl1;  // true
boolean bool3 = int1 == dbl2;  // true

boolean bool4 = int1 > dbl2;  // false
boolean bool5 = flt1 >= dbl2;  // false
boolean bool6 = dbl1 < dbl2;  // true

문자 자료형

char - 문자 character 자료형

  • 2바이트 사용 - short와 동일
  • 유니코드상 문자 표현
  • 단따옴표('')를 사용하여 1개의 문자 표현 - 빈 문자 불가
// 각 문자는 상응하는 정수를 가짐
char ch1 = 'A';  // -> 65
char ch2 = 'B';  // -> 66
char ch3 = 'a';  // -> 97
char ch4 = 'a' + 1;  // 'b' -> 98
char ch5 = '가';  // -> 44032
char ch6 = '가' + 1;  // '각' -> 44033
char ch7 = '가' + 2;  // '갂' -> 44034
char ch8 = '가' + 3;  // '갃' -> 44035
char ch9 = '나';  // -> 45208

// 형변환 가능
int ch1Int = (int) ch1;  // 65
int ch9Int = ch9;  // 45208

// 정수값과 연산하여 형변환 가능
int int_a1 = ch1 + 0;  // 65
int int_a2 = ch1 - 0;  // 65

// 문자 리터럴과 숫자, 유니코드로 표현 가능
char ch10 = 'A';
char ch11 = 65;
char ch12 = '\u0041';  // 'A'
  • int 1과 char '1'은 다름
//  - 해당 문자의 정수값 확인
char ch_b1 = '1';  // -> 49
char ch_b2 = '2';  // -> 50

//  ⚠️ 숫자 문자에 사칙연산 - 문자 번호 기준 결과 반환
char ch_b3 = '1' + '2';  // 'c' -> 99
int int_b4 = ch_b1 + ch_b2;  // '1' -> 49

//  💡 아래의 기능으로 문자가 의미하는 정수로 변환
int int_d1 = '1' - '0'  // 1
int int_d2 = Character.getNumericValue('2');  // 2
  • 빈 문자는 사용 불가, 공백은 가능
char empty = '';  // ❌
char space = ' ';  // -> 32
  • 비교 연산자
//  같은 문자열인지 여부 반환
boolean bool1 = 'A' == 'A';  // true
boolean bool2 = 'A' == '가';  // false

//  숫자와 비교할 시 해당 정수값 기준으로
boolean bool3 = 'A' == 65;  // true
boolean bool4 = 'A' > 64.0;  // true
boolean bool5 = 'A' > 66f;  // false

//  사전순 상 먼저 오는 쪽이 작음
boolean bool6 = 'A' < 'B';  // true
boolean bool7 = '가' > '나';  // false




출처 - 인프런 '제대로 파는 자바' 강의

profile
🦋개발 공부 기록🦋

0개의 댓글

관련 채용 정보