새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] 정수 자료형들과 관련 연산자

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

자료형
크기
표현 범위
byte
1바이트 (= 8비트)
-128 ~ 127 (-2^7 ~ 2^7-1)
short
2바이트
-32,768 ~ 32,767
int
4바이트
-2,147,483,648 ~ 2,147,483,647
long
8바이트
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

 

▶ 자료형의 범주 외의 수를 담을 수 없음

        //  ⚠️ 자료형의 범주 외의 수를 담을 수 없음
        byte overByte1 = 127;
//        byte overByte2 = 128;  //불가!!!
        byte overByte3 = -128;
//        byte overByte4 = -129;  //불가!!!

 

 

※ 자료형의 범위를 넘어가도록 숫자를 더하거나 뺄 경우 문제 발생!

byte 범위의 최고값에서 1을 더했더니 최저값이 나오고, 최저값에서 1을 빼니 최고값이 나옴

 

→ 변수 초기화 시에는 범위를 넘어가는 값은 컴파일러 선에서 넣지 못하게 했는데
   위의 예시처럼 초기화 후에는 컴파일러가 감히 판단하지 않아서 범위를 넘어가서 예상과 다른 값을 가져도
   컴파일 상으로 오류는 나타나지 않게되므로 주의해야함!

 

 

 

  큰 자료형에 작은 자료형의 값을 넣을 수 있지만 (묵시적 형변환)
     작은 자료형에 큰 자료형의 값을 '그냥' 넣을 수는 없음 → 형변환 필요!

        //  큰 자료형에 작은 자료형의 값을 넣을 수 있음
        //  💡 묵시적(암시적) 형변환
        _2b_short = _1b_byte;
        //  byte였던 1이 short 변수의 값으로 들어가 short 자료형의 1로 바뀜
        //  값은 동일하지만 담기는 통의 크기가 달라졌다는 의미
        _4b_int = _1b_byte; _4b_int = _2b_short;
        _8b_long = _1b_byte; _8b_long = _2b_short; _8b_long = _4b_int;

        
        //  ⚠️ 작은 자료형에 큰 자료형의 값을 '그냥' 넣을 수 없음
        //  들어있는 값의 크기와 무관
//        _1b_byte = _2b_short; _1b_byte = _4b_int; _1b_byte = _8b_long;  //불가!!!
//        _2b_short = _4b_int; _2b_short = _8b_long;  //불가!!!
//        _4b_int = _8b_long;  //불가!!!

 

 

  int 범위를 벗어나는 수에는 리터럴에도 명시해줘야 함

        long _8b_long = 4;  //사실 int인 4가 묵시적 형변환으로 들어가 있는것.
                            //끝에 L이 안붙으면 long이 아님
                            
                            
        //  ⭐ int의 범위를 벗어나는 수에는 리터럴에도 명시 필요
        //  끝에 l 또는 L을 붙이기 (L 권장)
        long _8b_long1 = 123456789123456789L;

 

 

  자바 7부터는 가독성을 위해 _를 사용하여 아래와 같이 표현 가능 (리터럴 쪽)

int _4b_int2 = 123_456_789;
long _8b_long2 = 123_456_789_123_456_789L;

 

 

▶ 명시적(강제) 형변환 : 작은 자료형에 큰 자료형의 값을 '형변환'하여 넣음

byte byteNum;
int smallIntNum = 123;

//  byte보다 int가 큰데 int를 강제로 byte로 형변환
byteNum = (byte) smallIntNum;


※ 강제로 범주 외의 값을 넣은 경우에는 값이 손실됨!

byte 범주 외의 값인 12345를 넣어 형변환한 결과, 값이 손실되어 12345 % 128 = 57로 나옴


 

 

 

▶ byte와 short의 연산은 byte나 short가 아닌 int를 반환함!

        byte b1 = 1;
        byte b2 = 2;
        short s1 = 1;
        short s2 = 2;

        //  ⚠️ 아래는 모두 불가
//        byte b3 = b1 + b2;
//        short s3 = b1 + b2;
//        short s4 = b1 + s2;
//        short s5 = s1 + s2;

        //  ⭐ byte와 short의 연산들은 int 반환
        //  그냥 int를 많이 쓰는 이유 중 하나
        int i1 = b1 + b2;
        int i2 = s1 + s2;
        int i3 = b1 + s1;

 

 

💡 int를 널리 사용하는 기타 이유들
- 자바 (및 다수 언어들) 에서 기본 자료형으로 지정됨
    → 라이브러리와 API 등에서 사용됨
- 다른 언어들과 호환 (널리 사용되는 자료형)
- 연산 속도가 타 자료형보다 빠름
    →  32비트 ( 4바이트 ) : 대부분의 CPU에서 처리하기 적합한 크기

 

 

▶ 정수 자료형의 나누기 계산은 소수점 아래를 '버림'

나누기 계산 결과가 소수가 아닌 정수인 것을 보아 소수점을 버렸음을 알 수 있음

 

 

▶ '%2' 연산을 사용하여 홀수와 짝수 구분에 많이 사용함

x % 2의 결과값이 0이면 짝수, 1이면 홀수임


 

 

postfix expr++ expr--
unary ++expr --expr +expr -expr ~ !
multiplicative * / %
additive + -
shift << >> >>>
relational < > <= >= instanceof
equality == !=
bitwise AND &
bitwise exclusive OR ^
bitwise inclusive OR |
logical AND &&
logical OR ||
ternary ? :
assignment = += -= *= /= %= &= ^= |= <<= >>= >>>=

출처 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.