- <<는 덧셈보다 우선순위 낮음
x << 2 + 1
이는
x << (2 + 1 )
과 같음
- 비트연산자(&)는 비교연산자(==, > , < , != ,, 크기 같음 여부) 보다 낮음
- AND 의미하는 &,&& 가 OR을 의미하는 |,|| 보다 우선순위 높음
1) 산술 - 비교 - 논리 - 대입 순으로 수행
2) 단항 - 이항 - 삼항 순으로 수행
3) 단항 연산자와 대입 연산자 제외 모든 연산 진행방향은 왼 -> 오
연산 수행 직전에 발생하는 피연산자의 자동 형변환
1) 두 피연산자의 타입을 같게 일치
2) 피연산자 타입이 INT보다 작은 타입이면 INT 로 변환
산술변환의 규칙
- 1) 두 피연산자의 타입을 같게 일치시킨다 ( 둘 중 보다 큰 타입으로 일치시킨다)
- 2) 피연산자 타입이 INT보다 작은 타입이면 INT 로 변환
=> 이유 : 정수형의 기본타입 int가 가장 효율적으로 처리할 수 있는 타입이라서
=> 그리고 int보다 작은 char, short는 표현범위가 좁, 연산 중 오버플로우 발생 가능성 높음
1) 전위
- j = ++i
는 아래 과정과 같다.- 1) ++i
- 2) j=i
만약 i=5, j=0 라고 한다면
i++ (6)
j=i (6)
j=6 i=6
2) 후위
- j = i++
는 아래 과정과 같다.- 1) j=i
- 2) i++
만약 i=5, j=0 라고 한다면
j=i (5)
i++ (6)
j=5 i=6
byte a = 10;
byte b = 5;
byte c = a * b //에러, byte, char , short는 연산 시 자동으로 int로 바뀜
byte c = (byte) (a*b)
'2'(문자 유니코드 50) -'0' (문자 유니코드 48) -> 2
'd' - 'a' => 100-97 = 3
(+) 기본 연산자
1) 반올림
Math.round() => 간단 반올림 가능
2) 나머지 연산자 %
1) OR의 경우 (||)
참
이어어도 전체가참이라서 좌측의 피연산자가 참이면 우측은 평가하지 않는다=> 따라서 OR은 참일 확률이 높은 조건을 앞에세워둬야지 더 빠르게 작동 가능
2) AND의 경우(&&)
거짓
이어도 전체 연산 결과가 거짓이므로 좌측이 거짓이면 우측은 평가하지 않음=> 따라서 AND는 거짓일 확률이 높은 조건을 앞에 세워둬야지 더 빠르게 작동 가능
class Test{
public static void main(String[] args) {
int a = 5;
int b = 0;
System.out.printf("a=%d, b=%d%n", a, b);
System.out.printf("a!=0 || ++b!=0 = %b%n", a!=0 || ++b!=0);
System.out.printf("a=%d, b=%d\n", a, b);
System.out.printf("a==0 && ++b!=0 = %b%n", a==0 && ++b!=0);
System.out.printf("a=%d, b=%d%n", a, b);
} // mainÀÇ ³¡
}