[Java] 연산자의 종류, 연산 방법

toget ㅣ 2023. 10. 3. 10:15

연산자 (Operator) 정의

프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다.
연산에 사용되는 표시나 기호를 연산자(operator)라고 한다.
연산되는 데이터는 피연산자(operand)라고 한다.
예) 산술연산 +, -, *, /, %

 

연산자의 종류

종류 연산자 기호 우선순위
증감 연산자 ++,-- 1순위
산술 연산자 +, -, *, /, % 2순위
시프트 연산자 >>, <<, >>> 3순위
비교 연산자 >, <. >=, <=, ==, != 4순위
비트 연산자 &, |, ^, ~ ~만 1순위, 나머지는 5순위
논리 연산자 &&, ||, ! !만 1순위, 나머지는 6순위
조건(조항) 연산자 ?, : 7순위
대입 연산자 =, *=, /=, %=, +=, -= 8순위

 

연산 방법

증감 연산자


증감연산자는 피연산자의 값을 1씩 증가 또는 감소시키는 연산자이다. 증감 연산자가 변수 앞에 위치하느냐 변수 뒤에 위치하느냐에 따라 결과 값이 달라진다.

구분 연산자 설명

 

구분 연산자 설명
증감 연산자 value++ 먼저 해당 연산을 수행한 후 
피연산자의 값을 1증가 시킴
++value 먼저 피연산자의 값을 1증가 
후 해당 연산을 수행함
value-- 먼저 해당 연산을 수행한 후 
피연산자의 값을 1감소 시킴
--value 먼저 피연산자의 값을 1감소 
후 해당 연산을 수행함
예시1

int num1 = 7;
int num2 = 7;
int result_1;
int result_2;

result_1 = --num1+4; //10 
result_2 = num2--+4; //11

result_1는 연산 전 (7-1) 계산 후 + 4를 연산하여 10이 된 후 출력 된다.
result_2는 7+4 연산 후 값 11을 출력 후 11이 된다.

 

예시2
int bac1 = 32;
int bac2 = 16;
int bac3 = ++bac1-bac2;//33-16
int bac4 = bac1--+bac2;//32+16
int k = 100;

//문제
System.out.println(bac3);
System.out.println(bac4);
System.out.print(k--+bac1);

결과
17 //전위 연산자가 붙어서 (32+1)-16
49 //32+16일것 같지만, 위 bac3으로 33이 반환되어있는 상태 33+16 (주의)
132

 

 

산술 연산자


가장 기본이 되는 연산자로 4칙 연산(+, -, *, /)과 나머지 값을 구하는 나머지 연산자(%)가 있다.

구분 연산자 설명
산술 연산자 + 두 수에 대한 덧셈
- 두 수에 대한 뺄셈
* 두 수에 대한 곱셈
/ 두 수에 대한 나눗셈
% 두 수를 나눈 후 그 나머지를 반환한다.


시프트(shift) 연산자



시프트 연산자는 bit단위의 연산처리를 하며 자료의 가공을 위해 오른쪽 또는 왼쪽으로 이동하여 값에 대한 변화를 일으키는 연산자입니다.

구분 연산자 설명
>> : bit값을 오른쪽으로 이동 (빈 자리는 부호값으로 대입) 한다.
<< : bit값을 왼쪽으로 이동 (빈 자리는 0으로 대입) 한다.
>>> : bit값을 오른쪽으로 이동 (빈 자리는 0으로 대입) 한다.

int leftShift = bitnum1<<2;
//2비트씩 왼쪽으로 이동해라
//bitnum1 = 0000 0101
//결과 0001 0100 = 20
System.out.println("왼쪽 쉬프트 연산 결과 :  "+leftShift);

int rightShift = bitnum2>>1;
//1비트씩 오른쪽으로 이동해라 
//bitnum2 = 0000 0011
//결과 0000 0001 = 1
System.out.println("오른쪽 쉬프트 연산 결과 :  "+rightShift);
//비트를 한칸 옮길 때마다 값이 두배가 증가 또는 감소 (*2 , /2만큼 변경)

 


비교 연산자



변수나 상수의 값을 비교할 때 쓰이는 연산자로서 결과가 항상 true 또는 false인 논리값(boolean)이어야 한다.

구분 연산자 설명
> 크다
< 작다
>= 크거나 같다
<= 작거나 같다
== 피연산자들의 값이 같다
!= 피연산자들의 값이 같지 않다

System.out.println(5<2); //false
System.out.println(5>2); //true
System.out.println(5<=2); //false
System.out.println(5>=2); //true
System.out.println(5==2); //false
System.out.println(5!=2); //true 둘이 같지 않다
            
int number1 = 5;
int number2 = 2;
int number3 = 5;
// == , !=
System.out.println(number1==number2);

String(참조형 변수)
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1==str2); //false = 주소값이 다르다.

 

대입 연산자


특정한 상수 값이나 변수 값 또는 객체를 변수에 전달하여 기억시킬 때 사용하는 연산자이다.

구분 연산자 설명
복합대입 연산자 = 연산자를 중심으로 오른쪽 변수값을 왼쪽 변수에 대입한다.(대입 연산자)
+= 왼쪽 변수에 더하면서 대입한다.(복합대입 연산자)
-= 왼쪽 변수값에서 빼면서 대입한다.(복합대입 연산자)
*= 왼쪽 변수에 곱하면서 대입한다.(복합대입 연산자)
/= 왼쪽 변수에 나누면서 대입한다.(복합대입 연산자)
%= 왼쪽 변수에 나머지 값을 구하면서 대입한다.(복합대입 연산자)

int playerHp = 100;
int potion = 50;

System.out.println("포션 섭취"+(playerHp+=potion));//150
System.out.println("포션 섭취"+(playerHp+=potion));//200
//playerHp = playerHp+potion;
//playerHp+=potion;와 같다.
            
int maxValue =3;
maxValue = maxValue+3;
System.out.println("대입연산 결과 : "+maxValue);
            
//복합대입 연산자
int maxValue1 =5;
maxValue1+=10; //maxValue1 = maxValue1+10과 같다.
System.out.println("결과 : "+maxValue1);

+= 로 더하면서 증가하는 것을 확인할 수 있다.


비트 연산자

피연산자 즉 연산의 대상이 되는 값들을 내부적으로 bit단위로 변경한 후 연산을 수행하는 연산자이다.

연산자 
& : 비트 단위의 AND
| : 비트 단위의 OR
^ : XOR (배타적 OR)
~ : 단항 연산자 이며, 비트를 반전한다. 0은 1로 1은 0으로 만듬

 

a, b 각 상수의 2진수 비트값을 연산한다.

a b & | ^    
0 0 0 0 0  
0 1 0 1 1 
0 0 1 1 1
1 1 1 1 0  
~ 연산
0 -> 1
1 -> 0 반전이다
예제1

int bitnum1 = 5; //0000 0101
int bitnum2 = 3; //0000 0011 2진수로 했을 때

int resultAnd = bitnum1 & bitnum2;
//0000 0101
//0000 0011
//---------
//0000 0001  -> 동일한 1만 1로 변환하여 나온 결과이다.
//& 연산 : 두 수의 각자리수에 대해 둘다 1일 경우 1로 변환

System.out.println("&연산 결과 :  "+resultAnd);
//결과는 1 

int resultOr = bitnum1 | bitnum2;

//0000 0101
//0000 0011
//---------
//0000 0111 
System.out.println("|연산 결과 :  "+resultOr);
//결과는7


조건 연산자(삼항 연산자)


하나의 조건을 정의하여 만족 시에는 ‘참값’을 반환하고 만족하지 못할 시에는 ‘거짓값’을 반환하여 단순 비교에 의해 변화를 유도하는 연산자이다. 피연산자가 3개라 해서 삼항 연산자라고도 부른다.

구분 연산자 설명 구성
조건 연산자 ? : 제어문의 단일 비교문과 유사하다. 조건식 ? 참값 : 거짓값

예시

//삼항연사자
int value2 =(true)?1:2; //맞으면 1 틀리면 2
System.out.println(value2);

int number5 = 10;
int number6 = 20;
int res = (number5>number6)? number5:number6;

System.out.println("변수 2개중 큰수는? : "+res);

int number7 = 30;
int number8 = 15;

boolean isCheck = (number7-number8>10)? true:false;
System.out.println("두수의 차이가 10보다 크냐? : "+isCheck);

int number9 = 2;
String sRes=(number9%2==0)? "짝수" : "홀수"; //2로 나눴을 때 나머지가 0이랑 같냐
System.out.println("홀짝 결과는? : " +sRes);



출처

https://phantom.tistory.com/19