본문 바로가기
🌈 백엔드/JAVA_기초

JAVA 개념_연산자

by 개발자 알마 2023. 2. 13.
반응형

 

 

 

 

[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

댓글