[Java] 연산자

thingzoo·2023년 6월 13일
0

Java

목록 보기
5/20
post-thumbnail

연산자 종류

산술 연산자

사칙 연산 및 비트연산을 포함

사칙 연산자

+(덧셈) -(뺄셈) *(곱셈) /(나눗셈/몫) %(나눗셈/나머지)

int a = 20;
int b = 10;
int c;

// 덧셈
c = a + b;
System.out.println(c); // 30

// 뺄셈
c = a - b;
System.out.println(c); // 10

// 곱셈
c = a * b;
System.out.println(c); // 200

// 나눗셈
c = a / b;
System.out.println(c); // 2

c = (float)a / b;
System.out.println(c); // 2.0

// 나눗셈 (나머지) = 나머지 연산
c = a % b;
System.out.println(c); // 0

// 우선 순위 연산
System.out.println(2 + 2 * 2); // 6
System.out.println((2 + 2) * 2); // 8
System.out.println(2 + (2 * 2)); // 6

비트 연산자(bitwise operator)

피연산자를 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자
&(AND) |(OR) ^(XOR)

  • and: 피연산자 둘다 1이면 1, 아니면 0
  • or: 피연산자 중 하나라도 1이면 1, 아니면 0
  • xor: 피연산자 값이 서로 다르면 1, 같으면 0

또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용
<<(left shift) >>(right shift)

  • x << y: 정수 x의 각 비트를 y만큼 왼쪽으로 이동(빈자리는 0으로 채움)
  • x >> y: 정수 x의 각 비트를 y만큼 오른쪽으로 이동(빈자리는 최상위 부호비트로 채움)
  • x >>> y: 정수 x의 각 비트를 y만큼 오른쪽으로 이동(빈자리는 0으로 채움)

👍🏻 어디에 쓰는 놈잉고...?

  • x << y: x * 2^y
  • x >> y: x / 2^y
  • 1 << n: 2^n
  • 보통 빠르게 2^n 연산을 하고 싶을때 사용!

비교 연산자

크고 작음과 같고 다름을 비교하여 참(true)/거짓(false) 값인 boolean 값을 출력
>(초과) <(미만) >=(이상) <=(이하) ==(같다) !=(다르다)

// 비교 연산자 (참이면 true, 거짓이면 false)
System.out.println(10 > 9); // 10 는 9 보다 크다 (참이면 true, 거짓이면 false)
System.out.println(10 >= 9); // 10 는 9 보다 크거나 같다 (true)
System.out.println(10 < 9); // 10 는 9 보다 작다 (false)
System.out.println(10 <= 9); // 10 는 9 보다 작거나 같다 (false)
System.out.println(10 == 10); // 10 는 10 와 같다 (true)
System.out.println(10 == 9); // 10 는 9 과 같다 (false)
System.out.println(10 != 10); // 10 는 10 와 같지 않다 (false)
System.out.println(10 != 9); // 10 는 9 과 같지 않다 (true)

논리 연산자

그리고(AND)와 또는(OR) 으로 조건을 연결
&&(AND) ||(OR) !(NOT)

// And 연산
System.out.println((5 > 3) && (3 > 1)); // 5 는 3 보다 크고, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) && (3 < 1)); // 5 는 3 보다 크고, 3 은 1 보다 작다 (false)

// Or 연산
System.out.println((5 > 3) || (3 > 1)); // 5 는 3 보다 크거나, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) || (3 < 1)); // 5 는 3 보다 크거나, 3 은 1 보다 작다 (true)
System.out.println((5 < 3) || (3 < 1)); // 5 는 3 보다 작거나, 3 은 1 보다 작다 (false)

// System.out.println(1 < 3 < 5); // 불가능한 코드

// Not 연산
System.out.println(!flag1); // false (flag1 값의 반대)
System.out.println(!flag3); // true (flag3 값의 반대)
System.out.println(!(5 == 5)); // false
System.out.println(!(5 == 3)); // true

대입 연산자

변수를 바로 연산해서 변수에 저장하는 연산자
=(기본 대입 연산자)
+= -= *= /= %= (복합 대입 연산자)
++ —-(대입 증감 연산자)

// 대입 연산자
int number = 10;
number = number + 2;
System.out.println(number); // 12

// 복합 대입 연산자
number = 10;

number += 2; // number = number + 2와 동일
System.out.println(number); // 12

number -= 2;
System.out.println(number); // 10

number *= 2;
System.out.println(number); // 20

number /= 2;
System.out.println(number); // 10

number %= 2;
System.out.println(number); // 0
// 대입 증감 연산자
int a = 10;
int b = 10;
int val = ++a + b--; // a 는 연산전에 +1, b 는 연산후에 -1

System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val); // 21


int c = a--; // c 에 a 값 대입 후 a-1  (즉, a=10, c=11)
int d = ++b; // b 값 +1 후에 d 에 대입 (즉, b=10, d=10)
int val = c-- * ++d; // c 는 연산후에 -1, d 는 연산전에 +1

System.out.println(a); // 10
System.out.println(b); // 10
System.out.println(c); // 11
System.out.println(d); // 10
System.out.println(val); // 11 * 11 = 121

🔥 대입 증감 연산자 주의할점!!
대입 증감 연산자는 연산자가 붙는 위치에 따라 전위 연산자, 후위 연산자라고 부르는데 이 두가지는 연산 방식이 다르다.

  • 전위 연산자 ++a: 해당 줄에서 연산이 수행됨
  • 후위 연산자 a++: 해당 줄 이후에 연산이 수행됨

기타 연산자

형변환 연산자

괄호 안에 변환할 타입을 넣으면 피연산자의 타입이 변경됨
(type)

// 형변환 연산자
int intNumber = 93 + (int) 98.8; // 93 + 98

double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8

삼항 연산자

비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자
(조건) ? (참 결과) : (거짓 결과)

// 삼항 연산자
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false;
System.out.println(b); // false

String s = (x != y) ? "정답" : "땡";
System.out.println(s); // 땡

int max = (x > y) ? x : y;
System.out.println(max); // 9

int min = (x < y) ? x : y;
System.out.println(min); // 1

instance of 연산자

피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답
(객체) instance of (클래스)

연산자 우선순위

📌 연산자 우선순위 : 산술 > 비교 > 논리 > 대입

  • 연산자 여러개가 함께 있는 연산을 계산할때는 우선순위가 있음
  • 위 우선순위에 따라서 최종적인 응답값이 결정됨
  • 단, 괄호로 감싸주면 괄호안의 연산이 최우선순위로 계산!
// 연산자 우선순위
int x = 2;
int y = 9;
int z = 10;

boolean result = x < y && y < z; // <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // true

result = x + 10 < y && y < z; // +10 산술연산자 계산 후 <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // false

result = x + 2 * 3 > y; // 산술연산자 곱센 > 덧셈 순으로 계산 후 > 비교연산자 계산
System.out.println(result); // false (8>9)

result = (x + 2) * 3 > y; // 괄호안 덧셈 연산 후 괄호 밖 곱셈 계산 후 > 비교연산자 계산
System.out.println(result); // true (12>9)

산술 변환

연산 전에 피연산자의 타입을 일치시키는 것

  • 두 피연산자의 타입을 같게 일치시킴 (둘중에 저장공간 크기가 더 큰 타입으로 일치)
  • 피연산자의 타입이 int 보다 작은 short 타입이면 int 로 변환
  • 피연산자의 타입이 long 보다 작은 int, short 타입이면 Long 으로 변환
  • 피연산자의 타입이 float보다 작은 long, int, short 타입이면 float 으로 변환
  • 피연산자의 타입이 double 보다 작은 float, long, int, short 타입이면 double 으로 변환
// 산술변환 
short x = 10;
int y = 20;
int z = x + y; // 결과값은 더 큰 표현타입인 int 타입의 변수로만 저장

long lx = 30L;
long lz = z + lx; // 결과값은 더 큰 표현타입인 long 타입의 변수로만 저장

float fx = x; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장
float fy = y; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장
float fz = z; // 결과값은 더 큰 표현타입인 float 타입의 변수로만 저장

Reference

🔗 스파르타코딩클럽 Java 문법 종합반

profile
공부한 내용은 바로바로 기록하자!

0개의 댓글