반응형
[1] 연산자
(1) 연산자 종류
- 항 operand : 연산에 사용되는 값
- 피연산자 operator : 항을 이용하여 연산하는 기호
- 연산자
종류 | ||
단항연산자 | 부호연산자 | 양수(+) 음수 (-) |
증감연산자 | ++ -- | |
논리부정연산자 | ! | |
이항연산자 | 산술연산자 | + - * / % |
대입연산자 | = | |
비교연산자 | >, <, >=, <=, == , != | |
논리연산자 | && || | |
삼항연산자 | (조건식) ? A : B | 조건식에 따라 A 또는 B 선택 |
[2] 대입연산자
(1) 대입연산자 assignment operator
- 변수에 다른 변수 또는 값을 대입하는 연산자
//정수(int) 를 가진 변수(num)은 10이라는 데이터 값을 대입한다
int num =10;
[3] 부호연산자
(1) 부호 + : 변수의 부호를 유지한다
int i = -10 ;
i = +i;
System.out.println(i) // -10
(2) 부호 - : 변수의 부호를 바꾼다
int i = -10 ;
i = -i;
System.out.println(i) // 10
[4] 산술연산자 : 사칙연산자
numA + numB (합)
numA - numB (빼기)
numA * numB (곱)
numA / numB (나누기)
numA % numB (나머지)
(1) 합하기 +
(2) 빼기 -
(3) 곱하기 *
(4) 나누기 /
(5) 나머지 %
부호 상관없이 연산 결과 후 왼쪽 부호와 똑같은 부호를 붙인다
System.out.prinln( -10 % 8 ); // -2
System.out.prinln( 10 % -8 ); // 2
System.out.prinln( -10 % -8 ); //-2
[5] 증가감소 연산자
- 연산자가 항의 앞에 있는지 , 뒤에 있는지에 따라 연산시점과 결과가 달라진다
(1) 증가 ++
num++ (기존num값을 대입한 후 num+1을 한다)
++num ( 기존num값+1을 한뒤 대입한다)
(2) 감소 --
num-- (기존num값을 대입한 후 num-1을 한다)
--num ( 기존num값-1을 한뒤 대입한다)
(3) i+1 과 i++ 차이
- i+1 자체는 값이 증가하지 않으나 i++ 자체는 값이 증가한다
int sum =0;
int num = 0;
for( int i =0; i < 10 ; i++) {
sum = num +1 // num =0 으로 변하지 않는다
num = num +1 // num =1으로 증가하였다
num++ // num =1으로 증가하였다
}
[6] 관계연산자
- 관계가 맞으면 참 true , 틀리면 false
(1) 크다 또는 작다 > <
(2) 같다 ==
새로운 객체가 생성되면 주소값이 다르므로 똑같은 문자열 내용이라도 같지 않다
(3) 크거나 작거나 같다 >= <=
(4) 다르다 !=
numA > numB (크다 비교)
numA < numB (작다 비교)
numA == numB (같다)
numA != numB (다르다)
※ equals() 비교
문자열을 비교할때 사용한다
새로운 객체가 생성되어 주소값이 달라도 똑같은 문자열 내용이라면 같다고 출력된다
[7] 논리연산자
(1) AND 연산 : 논리곱 : &&
- 두 항이 모두 참인 경우에만 참이다
1 : 1 → 1
1 : 0 → 0
0 : 1 → 0
0 : 0 → 0
// 참 && 참 = 참
boolenanA = (10>5) && (10 > 7);
(2) OR 연산 : 논리합 : ||
- 두항 중 하나라도 참이면 참이다
1 : 1 → 1
1 : 0 → 1
0 : 1 → 1
0 : 0 → 0
//참 || 거짓 = 참
boolenanA = (10>5) || (2 > 7);
(3) NOT 연산 : 부정 : !
- 참인 경우 거짓 , 거짓인 경우 참으로 바꾼다
1 → 0
0 → 1
boolenanA = !(10>5);
!(참) = 거짓
!!(참) = 참
!!!(참) = 거짓
(4) 단락 회로 평가 short circuit evaluation
- 모든 경우의 수를 계산하지 않아도 바로 답이 나오는 경우
- AND의 경우 1개의 항이 거짓이면 결과는 거짓이므로 굳이 모든 경우의 수를 구할필요없음
- OR의 경우 1개의 항이 참이면 결과는 참이므로 모든 경우의 수를 구할필요없음
int num1 = 10;
int i = 2;
// AND 연산
boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
System.out.println(value); //거짓
System.out.println(num1); // 10+10 = 20
System.out.println(i); // 2
// OR 연산
value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
System.out.println(value); // 참
System.out.println(num1); // 20+10 = 30
System.out.println(i); // 2+2 = 4
[8] 복합대입 연산자
(1) 더한후 대입 +=
(2) 뺀 후 대입 -=
(3) 곱한 후 대입 *=
(4) 나눈 후 대입 /=
(5) 나머지 후 대입 %=
(6) 비트 왼쪽 이동 후 대입 <<=
(7) 비트 오른쪽 이동 후 대입 >>=
(8) 비트 AND연산후 대입 &=
(9) 비트 OR 연산후 대입 |=
(10) 비트 XOR연산 후 대입 ^=
numA += numB
numA = numA + numB
numA -= numB
numA = numA - numB
numA *= numB
numA = numA * numB
numA /= numB
numA = numA / numB
[9] 삼항연산자 : 조건연산자
(1) 조건연산자
- 조건식의 결과가 true인 경우와 false인 경우에 따라 다른 결과를 수행한다
- 조건식 ? 결과1 : 결과2
- if 조건문과 같이 사용된다
int x = 5;
int y = 3;
int max;
max = (x > y)? x : y;
System.out.println(max); // 5
(2) 조건연산자의 자동형변환
타입이 다를경우 자동형변환이 된다
x = x+ (변수< 0.5 ? 0 : 0.5)
// 0은 0.0으로 float로 자동변환되어 판단한다
[10] 비트연산자
- 마스크 : 특정 비트를 가리고 몇개의 비트 값만 사용할때
(1) 비트 연산자의 종류
~ | 비트 반전 : 1의 보수 | a = ~a ; |
& | 비트 AND 비트 | 1 & 1 1 반환 그 외 0 |
| | 비트 OR 비트 | 0|0 0반환 그 외 1 |
^ | 비트 XOR 비트 | 2개의 비 트가 서로 다른경우에 1 반환 |
<< | 왼쪽 shift | a << 2 변수 a를 2비트만큼 왼쪽으로 이동한다 |
>> | 오른쪽 shift | a >> 2 변수 a를 2비트만큼 오른쪽으로 이동한다 |
<<< | 왼쪽 shift | a << 2 변수 a를 2비트만큼 왼쪽으로 이동한다 그리고 채워지는 비트는 부호상관없이 0이다 |
>>> | 오른쪽 shift | a >> 2 변수 a를 2비트만큼 오른쪽으로 이동한다 그리고 채워지는 비트는 부호상관없이 0이다 |
(2) 비트 AND 연산자 &
2진수의 1이 두 비트가 같을때만 1로 반환한다
3 & 5 → 1
3 = 0011
5 = 0101
결과 = 0001 이기 떄문에 1
0 0 ---> 0
0 1 ---> 0
1 0 ---> 0
1 1 ---> 1
(3) 비트 OR연산자 |
2진수의 1이 한개의 비트가 같아도 1로 반환한다
3 | 5 → 7
3 = 0011
5 = 0101
결과 = 0111 이기 떄문에 0+4+2+1 =7
0 0 ---> 0
0 1 ---> 1
1 0 ---> 1
1 1 ---> 1
(4) 비트 XOR 연산자 ^
2진수의 값이 서로의 비트가 같아면 0, 다르면 1을 반환한다
3 ^ 5 → 6
3 = 0011
5 = 0101
결과 = 0110 이기 떄문에 0+4+2+0 =6
0 0 ---> 0
0 1 ---> 1
1 0 ---> 1
1 1 ---> 0
(5) 비트 반전연산자 ~
2진수의 값을 1의 보수하여 반환한다
~5 → -6
5 = 0101
반전결과 = 1010 이고 첫번째 1은 음수이기 때문에 2의 보수를 사용하여 결과도출
1010을 반전 0101 한뒤 +1 을해서 0110 의 값은 0+4+2+0 =6
음수 이기 때문에 -6 이 된다
0 0 ---> 0
0 1 ---> 1
1 0 ---> 1
1 1 ---> 0
(6) 비트이동연산자 << >> >>>
3 <<1
3 =0011 왼쪽으로 한칸씩 이동하라 0110 이 되므로 0+4+2+0 =6이 된다
3 >>1
3=0011 오른쪽으로 한칸씩 이동하라 빈칸은 이동하려는 0또는 1을 따라간다
0001이 되므로 0+0+0+1 =1이 된다
>>> 는 빈칸은 0으로만 채운다
1칸이동을 한다면 2^1 이동하여 3x2 = 6
2칸이동을 한다면 2^2 이동하여 3x4 = 12
(7) 비트 켜기
특정 비트만을 1로 설정해서 사용하고 싶을때
& 00001111 //하위 4비트 중 1인 비트만 꺼내기
(8)비트 끄기
특정 비트들만을 0으로 설정해서 사용하고 싶을때
| 11110000 //하위 4비트 중 0 인 비트만 0으로 만들기
(9)비트토글
모든 비트들을 0은 1로 , 1은 0으로 바꾸고 싶을때
[11] 연산자 우선순위
(1) 연산자 우선순위
(단항)증감연산자 (단항)부호연산자 (이항)논리연산자 |
++ , -- + , - ! |
우선순위 높음 |
(이항)산술연산자 | * / % |
↑ |
(이항)산술연산자 | + - | |
(이항)비교연산자 | < > <= >= |
|
(이항)비교연산자 | == , != | |
(이항)논리연산자 | & | |
(이항)논리연산자 | ^ | |
(이항)논리연산자 | : | |
(이항)논리연산자 | ?: | |
(이항)대입연산자 | = += -= *= /= %= | 우선선위 낮음 |
(2) 연산자의 결합규칙
int x,y ;
x = y = 3; // y에 3을 대입한 후 , x에 3을 대입한다
System.out.println(x); //3
System.out.println(x); //3
- 연산자의 결합규칙이 왼쪽에서 오른쪽인 경우 : + ,-
- 연산자의 결합규칙이 오른쪽에서 왼쪽인 경우 : =
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽으로 진행한다
반응형
'🌈 백엔드 > JAVA_기초' 카테고리의 다른 글
JAVA 개념_조건문 (0) | 2023.02.16 |
---|---|
JAVA 개념_ 반복문 (0) | 2023.02.13 |
JAVA 개념_ 자료형 (0) | 2023.02.13 |
JAVA 개념_변수 (4) | 2023.02.03 |
JAVA _프로그래밍 언어 (0) | 2023.02.03 |
댓글