연산자의 종류
단항 연산자 - ++ , -- , + , - ,~ ,!
이항 연산자 - 산술 연산자, 비교 연산자, 논리 연산자 ,
삼항 연산자 - ? :
대입 연산자 - = , -= 등등
연산자의 우선순위
단항연산자 > 이항연산자(산술>비교>논리) > 삼항연산자 > 대입연산자
수학의 공식과 우선순위가 같지만 몇가지 주의해야할 것이 있다.
1. <<, >> , >>> 는 덧셈 연산자보다 우선순위가 낮다.
ex -> x << 2+1 은 x << (2+1)과 같다.
2. II , I(or)는 &&, &(and) 보다 우선순위가 낮다.
증감 연산자(단항연산자)
증가 연산자 (++) - 피연산자의 값을 1증가시킨다.
감소연산자(--) - 피연산자의 값을 1 감소시킨다.
전위형 -> j = ++i; -> 값이 참조되기 전에 증가시킨다.
후위형 -> j = i++; -> 값이 참조된 후에 증가시킨다.
부호연산자(+,-) 와 논리부정연산자(!) (단항연산자)
부호연산자(+,-) -> +는 1을 곱하고 , -는 피연산자에 -1을 곱한다.
논리부정연산자(!) -> true는 false로 , false는 true로
비트전환연산자(~) (단항연산자)
정수를 2진수를 표현했을 때, 1은 0으로 0은 1로 바꾼다. 정수형에서만 사용
10을 -10으로 만드려면
1. 10을 2진수로 바꾼다. 0(부호) 0001010
2. ~10 을 해준다. 1(부호) 1110101 -> 10진수로는 -11
3. +1 을 해준다. 1(부호) 1110110 -> 10진수로는 -10이된다.
이항연산자의 특징
이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.
- int보다 크기가 작은 타입은 int로 변환한다. ( byte , char, short -> int)
- 피연산자 중 표현범위가 큰 타입으로 형변환 한다.
- char + int -> int + int -> int
- float + int -> float + float -> float
- long + float -> float + float -> float
- float + double -> dlouble + double -> double
byte a = 10;
byte b = 20;
byte c = a+b; //에러... byte를 더하면 int로 형변환이 되는데 타입이 byte여서..
byte c = (byte)(a+b) ; //하면 a+b에서 int로 변했던것이 다시 byte로 변해서됨
int a = 1000000;
int b = 2000000;
long c = a*b; // c는 -1454759936이 저장된다. int값의 범위가 넘어서 정수오버플로우가발생
long c = (long)a*b // 해야함
char c1 = 'a' ; a는 97임
char c2 = c1 +1 ; //에러 int형으로 형변환됨.
char c2 = ++c1 ; //형변환이 일어나지않아서됨
나머지 연산자, 쉬프트연산자 ( <<, >> , >>>) ( 산술연산자) (이항연산자)
나머지 연산자 - %
- 나누기한 나머지를 반환한다.
10 % 8 -> 2 //왼쪽 연산자의 부호를 따름.
10 % -8 -> 2
-10 % 8 -> -2
-10 % -8 -> -2
쉬프트 연산자 ( << , >> , >>> )
- 2n승으로 곱하거나 나눈 결과를 반환한다.
- 곱셈, 나눗셈보다 빠르다.
x << n 은 x * 2n승과 같다.
x >> n 은 x / 2n승과 같다.
8 << 2는 8*22승과 같다. 32
비교연산자 ( < , > , >= , <= , == , !=) ( 비교연산자 ) (이항연산자)
피연산자를 같은 타입으로 변환한 후에 비교한다(이항연산자 특징)
기본형과 참조형에 사용할 수 있지만 참조형에는 ==와 !=만 사용가능
'A' < 'B' -> 65 < 66 -> true // int로 형변환
'0' == 0 -> 48 == 0 -> false // int로 형변환
0.1d == 0.1f -> 0.1d == 0.d -> false //실수는 근사값이기때문에 float를 double바꾸는 과정중에 바뀔수 있다.
비트연산자 ( & I ^ ) (논리연산자) (이항연산자)
OR 연산자 ( I) : 피연산자중 어느 한쪽이 1이면 1이다.
AND 연산자 (&) : 피연산자 중 양쪽 모두 1이면 1이다.
XOR 연산자 ( ^) : 피연산자가 서로 다를때 1이다.
3 I 5 = 7인데 그 이유는
3은 2진수가 0(부호) 0000011
5는 2진수가 0(부호) 00000101
즉 0(부호) 0000111 -> 7
16진수에 주로 쓴다.
0x185C >> 4 & 0x000F = 0x0005
풀이
논리연산자 ( && II )
&& 가 II 보다 우선순위가 높다.
삼항연산자(? :)
조건식의 연산결과가 true이면 식1의 결과
false이면 식2의 결과를 반환
(조건식) ? 식1 : 식2
int score = 50;
char grade = score >=90 ? 'A' : (score >= 80? 'B' : 'C'); false반환
'IT 관련 > JAVA' 카테고리의 다른 글
자바 배열(array) (0) | 2022.06.11 |
---|---|
자바 조건문(if while 등) (0) | 2022.06.06 |
자바 printf 와 Scanner (0) | 2022.05.19 |
자바 상수,리터럴 ( constant , literal) (0) | 2022.05.17 |
자바 실수(float) (0) | 2022.05.16 |