[JAVA 복습] 자바의 자료형과 연산자 - 정수 자료형들과 관련 연산자

seonjeong·2023년 10월 19일
0

Java

목록 보기
22/26
post-thumbnail

정수 자료형들과 관련 연산자

자료형크기표현 범위
byte1바이트 (8비트)-128 ~ 127 (-2^7 ~ -2^7-1)
short2바이트-32,768 ~ 32,767
int4바이트-2,147,483,648 ~ 2,147,483,647
long8바이트-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 _1b_byte = 1;
short _2b_short = 2;
int _4b_int = 3; 
long _8b_long = 4;

// 묵시적(암시적) 형변환
_2b_short = _1b_byte;
_4b_int = _1b_byte; 
_4b_int = _2b_short;
_8b_long = _1b_byte; 

// 아래 모두 ❌
_1b_byte = _2b_short; 
_1b_byte = _4b_int; 
_1b_byte = _8b_long;
_2b_short = _4b_int; 

형변환(casting)

  • 명시적(강제) 형변환
byte byteNum;
int smallIntNum = 123;

byteNum = (byte) smallIntNum; // byteNum = 123
int intNum = 12345;

//  ⚠️ 강제로 범주 외의 값을 넣을 경우 값 손실
byteNum = (byte) intNum; // 💡 12345 % 128  byteNum = 57

이항 연산자

연산자의미
+더하기
-빼기
*곱하기
/나누기
%나머지
  • 좌우의 두 값을 계산한 뒤 결과를 반환
  • 부수효과를 일으키지 않음

📌 int끼리의 연산은 int를 반환
📌 byteshort의 연산들도 int를 반환

복합 대입 연산자

a += ba = a + b
a -= ba = a - b
a *= ba = a * b
a /= ba = a / b
a %= ba = a % b

단항 연산자

연산자반환값부수효과
+값 그대로없음
-양음 반전없음
x ++값 그대로1 증가
++x1 증가한 값1 증가
x--값 그대로1 감소
--x1 감소한 값1 감소
  • ++, --가 앞에 붙을 경우와 뒤에 붙을 경우의 결과 값이 다르다
    • 전위 연산자 : 선증감 후처리
    • 후위 연산자 : 선처리 후증감
int x = 1;

//  메서드 안으로도 '반환'되어 사용되는 것
System.out.println(x++);  // 1
System.out.println(++x);  // 3
System.out.println(x);    // 3

비교 연산자

비교연산자의미
a == ba와 b는 같다
a != ba와 b는 다르다
a > ba가 b 보다 크다
a >= ba가 b보다 크거나 같다
a < ba가 b보다 작다
a <= ba가 b보다 작거나 같다
  • boolean 자료형의 값을 반환(true , false)
int int1 = 3;
int int2 = 3;

//  다른 정수 자료형끼리 사용 가능
boolean bool1 = int1 == int2;  // true
boolean bool2 = int1 != int2;  // false

boolean bool3 = int1 > int2;   // false
boolean bool4 = int1 >= int2;  // true

boolean bool5 = int1 < int2;   // false
boolean bool6 = int1 <= int2;  // true

//  💡 우선순위에 따른 연산
boolean bool7 = int1 * int2 > int1 + int2;  // 1:* 2:+ 3:>  true

비트 연산자

: 비트(bit) 단위로 연산

  • & : AND , 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다
  • | : OR , 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다
  • ^ : XOR , 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다
  • ~ : NOT , 반전 (1을 더한 후 -1을 곱한 것과 같은 결과가 나옴)
  • << : left shift , 왼쪽으로 미는 것
  • >> : right shift , 오른쪽으로 미는 것
int x = 5;   // 00101
int y = 19;  // 10011

int x_and_y = 5 & 19;     // 00001 = 1
int x_or_y = 5 | 19;      // 10111 = 23
int x_xor_y = 5 ^ 19;     // 10110 = 22
int x_not_y = ~5;     	  // 11111111 11111010 = -6 
int x_left_y = 5 << 1;    // 01010 = 10
int x_right_y = 5 >> 1;   // 00010 = 2
  • &|는 단축 평가를 하지 않음
  • 활용
    • 홀수, 짝수 구분 : i % 2 == 1 = i & 1 == 1 → 비트 연산이 산술 연산보다 빠르다
    • swap : 성능 차이가 나지는 않는다
    • 비트마스킹
      • 태블릿에서 Wi-fi, Pen, Camera, SD Card를 지원하는지 여부를 데이터로 저장해야할 경우
      • 1이면 해당 스펙을 갖춘 것




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

profile
🦋개발 공부 기록🦋

0개의 댓글

관련 채용 정보