이전 포스팅의 연산자에서 진법으로 갑자기 넘어갔는데
이번 포스팅은 연산자에 대해서 더 알아봅니다.
연산자
- 연산하기 위해 예약해 놓은 부호들
1.연산자 우선순위 : 최단산쉬관리삼대콤마
먼저 연산<---------------------->나중에 연산
[최]우선 |
( ) 괄호 |
[단]항 |
~ , ! , + , -, ++ , -- |
[산]술 |
+ , - , * , / , % |
[쉬]프트 |
<< , >> , >>> |
[관]계 |
> , < , >= , <= , == , != |
논[리] |
비트논리 : & ,! , | , ^ 인발논리 : && , || |
[삼]항 |
? : |
[대]입 |
산술대입 =. += , -= , *= , /=, %= 쉬프트대입 <<= , >>=, >>>= 비트논리대입 &=, != , ^= |
[콤마] |
, 콤마 |
1) 단항 (Unary ) 연산에 필요한 항(피연산자)이 하나인 연산자,
* [ ~(tilde) 연산자 ] 1의 보수 연산자 ( 이진수로 변환해야하는 연산자 )
부호가 바뀌고 값도 변경된다
~ 양수 : 부호가 변경되고 1증가
~ 음수 : 부호가 변경되고 1감소
~5 = 5는 ( 0000 01010) 인데 ~5는 ( 1111 1010 ) = -6
~-3 = -3은 (1111 1101) 인데 2으로 변환 (0000 0011) = 2로
* [ ! ( not 연산자) ] : true -> false , false -> true
!(3>2) 는 FALSE가 나온다.
* [ + ] : 형식적 제공
* [ - ] : 2의 보수연산
부호만 변경되고 값은 그대로 유지하는 연산
* [ ++ ] 증가 연산(대상채의 값을 1씩 증가) >변수에만적용가능
* [ -- ] 감소 연산(대상체의 값을 1씩 감소) >변수에만적용가능
[연산자] [대상체] = 전위연산 ( 증가/감소를 수행하고 대입 )
[대상체] [연산자] = 후위연산 ( 대입을 수행하고 증가/감소 )
대입연산자에 할당하거나 method인자 값을 넣어줄때 전위와 후위는
다른 값을 할당한다.
소스코드 & 출력)
2) 산술연산자
+ |
더하기 |
- |
빼기 |
* |
곱하기 |
/ |
나누기 |
% |
나머지( 나눈 값의 나머지 ) |
소스코드로 재미잇게 알아보기)
3) 쉬프트연산자 : 비트밀기 연산자
* [ << Left Shift 연산자 ] : 비트를 왼쪽으로 밀어내고 빈칸을 항상 0으로 채운다.
밀어 낼 칸수가 전체 비트수를 넘어가면 다시 뒤로 돌아서
처음부터 채워진다.
* [ >> Right Shift 연산자 ] : 비트를 오른쪽으로 밀고 밀어서 빈칸을 최상휘 부호비트에
따라 양수면 0 을 음수면 1을 채운다.
비트에 밀려나면 버린다.
* [ >>> Unsigned Right Shift 연산자 ] : 비트를 오른쪽으로 미는데 양수,음수에 관계
없이 빈칸을 항상 0으로 채운다.
(즉 음수에다가 이 연산자를 쓰면 양수가 된다.)
문법 ) [대상체/피연산자] [연산자] [밀어낼 칸 수]
10 << 2 ( 10이라는 피연산자의 비트를 왼쪽으로 2칸밀어냄 )
[ 10 << 2 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
10의 2진수 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
8 + 2 = 10
[10 << 2 연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
32 + 8 = 40
5 << 4 연산
[ 5 << 4 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
5의 2진수 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
4 + 1 = 5
[5 << 4 연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
64 + 16 = 80
13 >> 2 연산
[13 >> 2 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
13의 2진수 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
8+4 + 1 = 13
[13 >> 2연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
2+1 = 3
25 >> 4 연산
[25 >> 5 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
13의 2진수 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
8+4 + 1 = 13
[13 >> 2연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
-10 >> 3
[-10 >> 3 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
13의 2진수 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
[-10 >> 3연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0
15 >>> 3
[15 >> 3 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
13의 2진수 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
8+4+2+1 =15
[15 >> 3연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1
-1>>> 1
[-1> >> 1 연산이전]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
13의 2진수 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
[-1 >>> 1연산 이후]
|
부호 비트 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
연산 결과 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
127
4) 관계연산자 : 대소 비교
* 연산의 결과가 True 나 False로 발생
* >,<,<=,>=,== ( 같으면 True 다르면 False) ,!= ( 다르면 True 같으면 False)
5) 논리연산자
* 일반논리 : 여러개의 관계연산자를 묶어서 비교
[ && AND연산자 ]
- 전항이 True 이고 후항이 True 일 때에만 True 를 내보낸다.
나머지는 False
- 전항이 False면 후항은 계산하지 않는다.
[ || OR연산자 ] :
- 전항과 후항이 전부 False일 때에만 False를 내보낸다.
나머지는 True
- 전항이 True 이면 후항은 계산하지 않는다.
* 비트논리 : 이진법으로 했을 때 사용하는 논리
& ( AND) : 상위비트와 하위비트 모두 1일때만 1을 내림 ( 나머지 0)
| (OR) : 상위비트와 하위비트 모두 0 일때만 0을 내림 ( 나머지 1)
^ (XOR) : 상위비트와 하위비트 둘 중 하나만 1 일때 1을 내림
ex)
12 & 9 |
12 | 9 |
12 ^ 9 |
12 >(1100)2 9 >(1001)2 결과 >(1000 )2=8 |
12 >(1100)2 9 >(1001)2 결과 >(1101 )2=13 |
12 >(1100)2 9 >(1001)2 결과 >(0101 )2=5 |
6) 삼항 연산자 ( 조건 연산 ) ? :
문법)
(연산식)? 항1 : 항2
연산식이 true 이면 항1 을 반환한다.
연산식이 false 이면 항2 을 반환한다.
소스코드)
결과)
7) 대입연산자
순수대입 : =
산술대입 : +=, -=, *=, /=, %=
쉬프트대입 : <<=, >>= , >>>=
비트논리대입: &= , |= , ^=
- 순수대입을 제외하고 대상체가 변수여야 만 한다. 연산 후 연산결과를 저장한다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] Eclipse (0) | 2018.03.26 |
---|---|
[JAVA] Package (패키지) (0) | 2018.03.26 |
[JAVA] 리터럴 , 기본형 변수 , 형변환 , constant , 연산자 & 진법 (0) | 2018.03.22 |
[JAVA] 개발환경설정 및 기초 (0) | 2018.03.21 |
[JAVA] 콘솔(Console)에서 출력 (0) | 2018.03.21 |