연산자

1. 연산자

 - 연산 : 어떤 규칙에 따라 계산함

 - 연산자 : 연산할 때 쓰는 기호

  - 자바 연산자 : 자바 코드 내에서 연산을 처리할 때 쓰는 기호들

 

2. 연산자의 종류

연산자 연산기호 설명 비고
1 산술연산자 +, -, *, /, % 사칙연산 및 나머지연산
2 증감연산자 ++, -- 데이터 값의 1증가 및 감소
3 비트연산자 &, |, ~, ^ 비트 AND, OR, NOT, XOR
4 쉬프트연산자 >>, <<, >>> 비트단위의 이동
5 비교연산자 <, >, <=, >=, ==, != 데이터의 크기 비교 참 또는 거짓
6 논리연산자 &&, ||, !, ^ 논리적 AND, OR, NOT, XOR
7 대입연산자 =, +=, -=, *=, /=, &=, |=, >>=,
<<=, >>>=
산술연산 결과의 대입 (축약형 표현) 실행
8 삼항연산자 (참 또는 거짓)? x : y 참인 경우 x, 거짓인 경우 y

 

 - 산술연산자 (+, -, *, /, %)

    - 산술연산자의 규칙 : 두개의 할을 이용해 계산하고, 결과를 반환

        ※ 반환(Return) : 연산식의 값을 돌려줘서 활용할 수 있게 해주는 것

// Example
System.out.println(6);
System.out.println(3 + 3);		// 6
System.out.println(3 - 3);		// 0
System.out.println(3 * 3);		// 9
System.out.println(4 / 3);		// 1 (몫)
System.out.println(7 % 3);		// 2 (나머지)
// 이 연산식은 연산 결과값과 같음

// 연산자 우선순위 (곱나 > 더빼)
System.out.println(4 + 6 * 2 - 1);

// 수동적으로 우선순위 변경 가능 (소괄호 사용), (중괄호, 대괄호는 불가능)
System.out.println((4 + 6) * (2 - 1));

 

 - 증감연산자 (++, --)

    - 전위형(Postfix) : 연산 or 실행 전 증감 수행 (++변수명)

 

// Example
int num = 10;
num++;                      // 후위형 (postfix) : 선처리, 후연산
++num;                      // 전위형 (prefix) : 선연산, 후처리
System.out.println(num);    // 12

int a = 20;
System.out.println(a++);    // 20을 출력 (처리)하고, 증가
System.out.println(a);      // 21
System.out.println(++a);    // 22로 증가부터 시키고, 출력
System.out.println(a);      // 22

int b = 10;
int c = b++;                // 10을 c에 저장한 후, b를 11로 증가
int d = ++c;                // c를 11로 증가 시킨 후, 11을 d에 저장

 

비트연산자 (&, |, ~, ^)

    - 비트와 비트를 하나씩 연산

    & (AND) : 두 항의 비트가 1과 1일 때만 1로 처리

    - | (OR) : 두 항의 비트가 0과 0일 때만 0으로 처리

    - ^ (XOR) : 두 항의 비트가 서로 다를 때만 1로 처리

    - ~ (NOT) : 단항의 비트를 모두 반전

 

    ※ 진수의 종류

        - 10진수 : 열 개의 기호로 수를 표현하는 체계

        - 16진수 : 열 여섯 개의 기호로 수를 표현하는 체계
        - 8진수(Octal) : 여덟 개의 기호로 수를 표현하는 체계

        - 2진수(Binary) : 두 개의 기호로 수를 표현하는 체계 (0, 1) (컴퓨터 메모리모두 비트로 표현)

 

 - 정수 자료형에서 첫 번째 비트부호비트로, 부호를 나타냄(첫 번째 비트가 1이면 -, 0이면 +)

 - 음수인 경우, 1을 뺀 다음 다시 반전시켜 절댓값을 구함

// Example
byte a = 2;				// 00000010
byte b = 7;				// 00000111
System.out.println(a & b);		// 2
System.out.println(a | b);		// 7
System.out.println(a & b);		// 5
System.out.println(~a);			// 11111101 : -3

 

 - 쉬프트연산자 (<<, >>, >>>)

    - 비트를 n칸씩 통째로 이동시킴 (부호비트는 유지)

// Example
System.out.println(a);			// 00000010
System.out.println(a << 1);		// 00000100

 

 - 비교연산자 (<, >, <=, >=, ==, !=)

    - 크기 비교 (>, <, >=, <=) : 데이터 크기의 대소 비교

// Example
int a = 3;
int b = 5;
System.out.println(a > b);		// false
System.out.println(a < b);		// true
System.out.println(a >= b);		// false
System.out.println(a <= b);		// true

    - 등가 비교 (==, !=) : 데이터 크기의 등가 비교

// Example
int a = 3;
int b = 5;
System.out.println(a == b);		// false
System.out.println(a != b);		// true

 

 - 논리연산자 (&&, ||, !, ^)

    - boolean 자료형의 값을 대상으로 연산

        ※ 불린(Boolean) : 참과 거짓을 의미하는 데이터 타입 (true or false로 반환)

    - && (AND) : 각 항이 true일 때만 true를 반환

    - || (OR) : 각 항이 false일 때만 false를 반환

    - ^ (XOR) : 각 항이 서로 다를 때만 true를 반환

    - ! (NOT) : true나 false를 반전시킴

// Example
boolean t = true;
boolean f = false;
System.out.println(t && t);		// true
System.out.println(t && f);		// false
System.out.println(!t);			// false

 

    ※ 비교연산과 논리연산의 조합

// Example
int age = 24;
int money = 3000;
// 비교 연산이 언제나 논리 연산보다 우선
boolean result = age >= 20 && money >= 1250;
System.out.println(result);			// true
// Example
int age = 11;
int height = 178;
System.out.println((age >= 12 && height >= 150)? "놀이기구 탑승!" : "탑승 불가!");	// 탑승 불가!

 

 - 대입연산자 (=, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>=)

    - 왼쪽의 것을 오른쪽에 대입

    ※ 복합대입연산자 : 대입연산자 앞에 다른 연산자가 붙은 것

// Example
int a = 3;
a += 2
System.out.println(a);		// 5

 

 - 삼항연산자 ((참 또는 거짓)? x : y)

    - if - else 문의 대체 형태

// Example
int a = (3 > 5)? 6 : 9;
System.out.println(a);		// 9
int b = (5 > 3)? 10 : 20;
System.out.println(b);		// 10

 

 - 삼항연산자는 중첩이 가능

// Example1
int peach = 23;
System.out.println(peach > 30 ? "많다" : peach > 20 ? "조금 부족" : "적다"); // 조금 부족

 

// Example2
// 삼항 연산 만들기 : 주어진 숫자가 양수면 "양수"를, 음수면 "음수"를 출력
// (단, 0일 때는 0 출력)

int num = 1;
String result = num > 0 ? "양수" : num < 0 ? "음수" : "0";
System.out.println(result);