연산자

김나영·2023년 5월 29일
0

Java 문법 종합반

목록 보기
1/21

1주차 참고

연산자

int x = 5;
int y = 10;
int z = x + y; // 5(피연산자) +(연산자) 10(피연산자)

산술 연산자 : +, -, *, /, %(나머지), <<, >>
비교 연산자 : >, <, >=, <=, ==, !=
논리 연산자 : &&(그리고), ||(또는), !(Not)
대입 연산자 : =, ++, --
기타 연산자 : (type), ?, :, instance of


사칙연산 : +, -, *, /(몫), %(나머지)

System.out.println(4 + 2); // 6
System.out.println(4 - 2); // 2
System.out.println(4 * 2); // 8
System.out.println(4 / 2); // 2
System.out.println(5 / 2); // 2
System.out.println(2 / 4); // 0
System.out.println(4 % 2); // 0
System.out.println(5 % 2); // 1

우선순위 연산

System.out.println(2 + 2 * 2); // * => 6
System.out.println((2 + 2) * 2); // 8
System.out.println(2 + (2 * 2)); // 6

변수를 이용한 연산

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); // 100
c = a / b;
System.out.println(c); // 2
c = a % b;
System.out.println(c); // 0

비교 연산자(true or false)

System.out.println(10 > 9); // 10이 9보다 크니? 응!(true)
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)

논리 연산자

  • 논리 연산자(비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자

  • 조건을 연결하였을 때 boolean 값들을 조합하여 참(true) 또는 거짓(false) 값인 boolean 값을 출력

  • &&(AND), ||(OR), !(NOT)

    boolean flag1 = true;
    boolean flag2 = true;
    boolean flag3 = false;
    System.out.println(flag1); // true
    System.out.println(flag2); // true
    System.out.println(flag3); // true

피연산자 중 하나라도 true이면 true => 또는(OR : ||)

System.out.println(flag1 || flag2 || flag3); // true
System.out.println(flag1 || flag2); // true

피연사가 모두 true이면 true => 그리고(AND : &&)

System.out.println(flag1 && flag2); // true
System.out.println(flag1 && flag2 && flag3); // true

AND

System.out.println((5 > 3) && (3 > 1)); // true && true => true
 System.out.println((5 > 3) && (3 < 1)); // true && false =>false

OR

System.out.println((5 > 3) || (3 > 1)); // true || true => true
System.out.println((5 > 3) || (3 > 1)); // true || false => true
System.out.println((5 < 3) && (3 < 1)); // false || false => false

논리 부정 연산자(! : NOT)

System.out.println(!flag1); // false
System.out.println(!flag3); // true
System.out.println(!(5 == 5)); // false
System.out.println(!(5 == 3)); // true

대입 연산자

  • 변수를 바로 연산해서 그 자리에서 저장하는(대입하는) 연산자

  • =(기본연산자), +=, -=, *= ....(복합대입연산자)

  • ++ : +=

  • -- : -=

기본대입연산자

int number = 10;
number = number + 2;
System.out.println(number); // 12
number = number -2;
System.out.println(number); // 10
number = number * 2;
System.out.println(number); // 20
number = number / 2;
System.out.println(number); // 10
number = number % 2;
System.out.println(number); // 0

복합대입연산자

number = 10;
number += 2; // number = number + 2
System.out.println(number); // 12
number -= 2; // number = number - 2
System.out.println(number); // 12-2 = 10
number *= 2; // number = number * 2
System.out.println(number); // 10 * 2 = 20
number /= 2; // number = number / 2
System.out.println(number); // 20 / 2 = 10
number %= 2; // number = number % 2
System.out.println(number); // 10 % 2 = 0

++, --

number++; // number에 +1을 하고 대입해라
// ==> number = number + 1;
// ==> number += 1;
System.out.println(number);
number--;  // number에 -1을 하고 대입해라
System.out.println(number);

주의점!

int a = 10;
int b = 10;
int val = ++a + b--; // ++a : a에 1을 더한 다음에 연산 실행 b : --가 없다고 생각하고 연산을 수행한 다음 b라는 값에 -1을 해줘라
System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val); // 21
System.out.println();
int a1 = 10;
int b1 = 10;
int val2 = ++a1 + --b1;
System.out.println(a1); // 11
System.out.println(b1); // 9
System.out.println(val2); // 20

형변환 연산자

int intNumber = 93 + (int)98.8;
System.out.println(intNumber); // 191
double doubleNumber = (double) 93 + 98.8;
System.out.println(doubleNumber); // 191.8

삼황연산자

  • 비교연산자와 항상 함께 쓰임

  • 비교연산자의 결과 : true or false -> 이 결과의 값에 따라 결정되는 무언가

  • 조건 ? 참 : 거짓

int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
System.out.println(b); // false
// x가 y랑 다르니? 응!!
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

  • 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
  • 맞으면 -> true
  • 틀리면 -> false

연산자의 우선순위

  • 산술 > 비교 > 논리 > 대입
  • 연산자 여러개가 함께 있는 연산을 계산할 때는 우선 순위 존재
  • 위 우선 순위에 따라서 최종적인 응답값이 결정됨
  • 단, 괄호로 감싸주면 괄호안의 연산이 최우선으로 계산됨

ex)

int x = 2;
int y = 9;
int z = 10;
**boolean result = x < y && y < z;** // 1. x < y 2. y < z, 3. &&
System.out.println(result); // true
**result = x + 10 < y && y < z;** // 1. x + 10, 2. x + 10 < y, 3. y < z, 4. &&
System.out.println(result); // false
**result = x + 2 * 3 > y;** // 1. 2 * 3, 2. x + (2 * 3), 3. x + (2 * 3) > y
System.out.println(result); // false
**result = (x + 2) * 3 > y;** // 1. (x + 2), 2. (x + 2) * 3, 3. (x + 2) * 3 > y
System.out.println(result); // true

연산 전에 두 피연산자의 타입이 다른 경우

  • 두 피연산자의 타입을 같게 일치시킴
    (둘 중에 저장공간 크기가 더 큰 타입으로 일치)
  • 피연산자의 타입이 'int'보다 작은 'short' 타입이면 'int'로 반환
  • 피연산자의 타입이 'long' 보다 작은 'int','short' 타입이면 'long'으로 변환
  • 피연산자의 타입이 'float' 보다 작은 'long', 'int', 'short' 타입이면 'float'으로 변환
  • 피연산자의 타입이 'double' 보다 작은 'float', 'long', 'int', 'short' 타입이면 'double'으로 반환
  • 이처럼, 변수 여러개를 연산했을 때 결과값은 피연산자 중 표현 범위가 가장 큰 변수 타입을 가지게 됨

ex)

short x = 10;
int y = 20;
int z = x + y;
System.out.println(z); // 30
long lx = 30L; // long 타입 변수는 접미사 L이 필수로 붙어야함
long lz = z + lx;
float fx = x;
float fy = y;
float fz = z;
System.out.println(lz); // 60
System.out.println(fx); // 10.0
System.out.println(fy); // 20.0
System.out.println(fz); // 30.0

비트 연산

  • Bit의 자리수를 옮기는 것
  • Byte를 8등분한게 Bit
  • Bit는 0,1 둘 중의 하나의 갓만을 저장하는 컴퓨터가 저장(표현)가능한 가장 작은 단위
  • 컴퓨터의 가장 작은 단위인 Bit이기 때문에 연산중에서 Bit 연산이 제일 빠름
  • 0,1 값으로 산술연산을 하거나, 비교연산을 할 수 있지만 비트 연산을 통해 자리수를 옮길 수도 있음
  • '<<'(왼쪽으로 자리수 옮기기), '>>'(오른쪽으로 자리수 옮기기)
  • 0,1은 2진수 값이기 때문에
    • 자리수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일
    • 자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일

ex)

System.out.println(3 << 2); // 12
System.out.println(3 << 1); // 6
  • 3을 2진수로 표현 -> 11(2진수) -> 1100(오른쪽으로 2번 이동) -> 8 + 4 = 12

  • 3을 2진수로 표현 -> 11(2진수) -> 110(오른쪽으로 1번 이동) -> 4 + 2 = 6

0개의 댓글