연산자 (Operators)
1. 산술 연산자
: 흔히 하는 사칙연산
+, -, *, /, %
- 우선순위는 일반적인 사칙연산.
- 모듈러(%)는 곱셈 나눗셈과 동일.
* int/int 정수와 정수는 나누었을 때 나누어 떨어지지 않으면 ?
: 출력은 나머지를 제외한 몫만 변수에 할당됨.
int divide = 21/10; // 나누어 떨어지지 않는 정수
System.out.println(divide); //출력 2
double doubleDivide = 21/10;
System.out.println(doubleDivide); //출력 2.0
* double 변수에 넣으려고 해도, 2.0이 된다.
* 정수형 변수에 실수형 결과를 넣으려고 하면 오류.
int intResult = 10.1 + 2; //error
1) 형변환(Type Casting)
: 자료형을 변환한다.
** 묵시적 (implicit) 형변환 : 일반적으로 더 작은 자료형에서 더 큰 자료형으로 변환될 때 자동으로 변환됨.
- byte -> short -> int -> long -> float -> double
** 명시적 (explicit) 형변환 : 더 큰 자료형에서 작은 자료형으로 변환할 때 수동으로 형 변환. (억지로 더 작은 공간의 자료형으로 옮기기 때문에 데이터 손실이 있을 수 있다.)
- 실수로 결과를 구하려면 연산 전에 피연산자 중 하나를 double로 변환하면 된다.
- char도 실제 메모리상에는 숫자로 저장되기 때문에, int를 비롯한 자료형과 연산이 된다. (char)로 형변환하면 문자로 출력됨.
double doubleVar = 10.24;
int castedDouble = (int) doubleVar;
System.out.println(castedDouble); //출력 10
long bigInt = 4294967296L;
System.out.println((int)bigInt); //출력 0 long을 int로
double doubleDivide = (double) 21 / 10; //먼저 형변환을 시켜주고 계산
System.out.println(doubleDivide);
int intPlusChar = 10;
char char1 = 65;
char char2 = 10;
System.out.println(intPlusChar + char1); // 75
System.out.println((char) (intPlusChar + char1)); // K
System.out.println(char1 + char2); // 75
System.out.println((char)(char1 + char2)); // K
2) String 덧셈 (String Concatenation)
- 두 문자열을 더할 경우 두 문자열을 연결하게 된다.
String hello = "HELLO, ";
String world = "World";
System.out.println(hello+world); //출력 HELLO, World
3) 증감 연산자
: 대상 피연산자의 값을 1 증가하거나 감소시키는 연산자.
++ | 값 1 증가 |
-- | 값 1 감소 |
- 반복 작업에서 반복 횟수, 배열 등에서 다음 대상을 나타내는 index, 횟수를 세는 용도 등...~
- 피연산자의 앞에 붙이면 변수의 값을 변화시킨 다음 해당줄의 코드가 실행
- 피연산자의 뒤에 붙이면 해당 줄의 코드가 실행된 다음 값이 변화
int count = 10;
System.out.println(++count); // 출력: 11 (출력 전에 1 증가, 값: 11)
System.out.println(count++); // 출력: 11 (출력 후에 1 증가, 값: 12)
System.out.println(--count); // 출력: 11 (출력 전에 1 감소, 값: 11)
System.out.println(count--); // 출력: 11 (출력 후에 1 감소, 값: 10)
4) 복합 할당 연산자
: 변수에 값을 넣을 때는 할당 연산자를 활용. + 다른 산술 연산자와 조합해서 현재 변수에 할당된 값을 더하거나 뺀 값을 할당시킬 수도 있다.
- 자기 자신을 활용해서 값을 할당시킬수도 있다.
= | 할당 | a = 10; |
+= | 왼쪽 피연산자에서 오른쪽 피연산자를 더한 값을 왼쪽 피연산자에 할당 | a +=10; a = a+10; |
-= | 빼기 | a -= 10; a = a-10; |
*= | 곱하기 | a*=10; a = a*10; |
/= | 나누기 | a /= 10; a = a/10; |
%= | 나머지 할당 | a %=10; a = a%10; |
2. 비교 연산자
1) 비교 연산자
: 관계 연산자. 두 연산자의 대소를 비교하여 boolean을 반환하는 연산
== | 같으면 T, 다르면 F |
!= | 다르면 T, 같으면 F |
> | 왼쪽이 크면 T |
>= | 왼쪽이 크거나 같으면 T |
< | 왼쪽이 작으면 T |
<= | 왼쪽이 작거나 같으면 T |
2) 논리 연산자
: 두 조건(boolean)에 대하여 두 조건의 참-거짓의 조합에 따라 boolean값 반환
- 여러 연산자가 조합되어 있으면 ! -> && -> || 순
&& | AND. 왼쪽&오른쪽 모두 T일때 T |
|| | OR. 왼쪽 오른쪽 둘 중 하나라도 T일때 T |
! | 피연산자가 T이면 F, F이면 T |
3) 삼항 연산자 (ternary operator)
: 하나의 조건이 참인지 거짓인지에 따라서 두가지 값 중 하나를 결정하는 연산자.
- 조건 하나와 후보가 되는 값 두개 : 3개의 항.
int temperature = 37;
String message = temperature < 38 ? "OK" : "Feverish";
3. 비트 연산자 (bitwise operator)
: 데이터를 비트 단위로 계산하는 연산자. (우리가 사용하는 형태가 아닌 데이터에 저장된 비트를 기준으로 계산)
1) AND 연산 (&)
: 피연산자의 각 자리의 비트를 비교. 두 비트가 모두 1이면 비트도 1, 아니면 0
2) OR 연산 (|)
: 피연산자의 각 자리의 비트를 비교. 두 비트 중 하나라도 1이면 1, 아니면 0
3) XOR 연산 (^) (Exclusive OR)
: 피연산자의 각 자리의 비트를 비교. 두 비트가 서로 다르면 1, 서로 같으면 0
4) NOT 연산 (~)
: 피연산자의 각 비트를 반대로 변환
- 0 -> 1, 1-> 0
5) SHIFT 연산 (<<, >>, >>>)
: 비트를 왼쪽 또는 오른쪽으로 이동.
- 왼쪽 피연산자를 오른쪽 숫자만큼 이동.
- 비트 범위를 넘어가면 버려짐.
- LEFT SHIFT (<<) : 비트를 왼쪽으로 이동. 비어버린 비트는 0으로 채움
- RIGHT SHIFT(>>, >>>) : 비트를 오른쪽으로 이동. 부호의 보존 여부에 따라 다름
'Programming > Java' 카테고리의 다른 글
클래스 (Class) (1) | 2023.11.28 |
---|---|
메서드 (Methods) (1) | 2023.11.23 |
제어문 (Control Statements) (1) | 2023.11.22 |
변수와 자료형 (Variables and Types) (1) | 2023.11.20 |
자바 개요 (1) | 2023.11.20 |