본문 바로가기
Language/JAVA

[JAVA] 03일차. 자바의 여러 가지 연산자 (1), (2)

by 전전긍긍 2022. 2. 7.

👀20220204 공부기록

 

📍본 포스팅은 인프런-Do it! 자바 프로그래밍 입문 강의를 바탕으로 작성함을 알립니다.

 

[무료] Do it! 자바 프로그래밍 입문 - 인프런 | 강의

비전공자, 문과생도 무릎을 ‘탁!’ 치며 이해하는 20년 경력 명강사의 자바 강의!, - 강의 소개 | 인프런...

www.inflearn.com


05. 자바의 여러 가지 연산자 (1)

📍대입 연산자 (assignment operator)

변수에 값을 대입하는 연산자. lvalue에 rvalue를 대입한다. 대입 연산자는 우선 순위가 가장 낮은 연산자이다.

 

📍증감 연산자 (increment and decrement operator), 관계 연산자 (relational operator)

증감 연산자는 단항 연산자로, 항의 앞/뒤의 위치에 따라 연산의 순서 및 결과가 달라짐에 유의해야 한다.

관계 연산자는 이항 연산자로, 연산의 결과가 true 또는 false로 나온다. (피연산자 사이의 상대적인 크기를 판단하는 연산자) 관계 연산자는 비교 연산자라고 하기도 한다. 

package assignment;

public class OperantionEx2 {

	public static void main(String[] args) {
		
		//증가 감소 연산자
		int num = 10;
		System.out.println(num++); //10을 출력한 후에 1을 증가시킴
		System.out.println(num); //11
		
		int num2 = 20;
		System.out.println(++num2); //1을 증가시킨 후에 출력
		System.out.println(num2); //21
		
		//관계 연산자 : 연산의 결과가 true or false
		System.out.println(3>5); //false
		int numA = 10;
		int numB = 5;
		boolean flag = (numA > numB); //true
		System.out.println(flag);
	}

 

📍논리 연산자 (logical operator)

논리 연산자는 주어진 논리식을 판단하여, true와 false를 결정하는 연산자이다. 연산의 결과가 true, false로 반환 됨.

연산자 기능 단락 회로 평가
&& (논리 곱) 두 항이 모두 참인 경우에만 결과 값이 참이다. 
(논리 and 연산)
앞의 항이 false이면 뒤 항의 결과를 평가하니 않아도 false
|| (논리 합) 두 항 중 하나의 항만 참이면 결과 값을 참이다.
(논리 or 연산)
앞의 항의 true이면 뒤 항의 결과를 평가하지 않아도 true
! (부정) 단항 연산자이다. 참인 경우는 거짓으로바꾸고, 거짓인 경우는 참으로 바꾼다.
(논리 not 연산)
booleanval = !(5 > 3);
//false
package assignment;

public class OperantorEx3 {

	public static void main(String[] args) {
    
		//논리 연산자_단락 회로 평가
		int num1 = 10;
		int i = 2;
		
        //논리 곱
        //앞의 항이 false이기 때문에 뒤의 항은 연산을 하지 않고 false를 출력
		boolean value = (((num1 = num1 + 10) < 10) && ((i += 2) < 10));
		System.out.println(value); //false
		System.out.println(num1); //20
		System.out.println(i); //2
		
		int num2 = 20;
		int j = 4;
		
        //논리 합
        //뒤의 항이 false여도 앞의 항이 true이기 때문에 뒤의 항은 연산을 하지 않고 true출력
		boolean value2 = (((num2 = num2 + 10) > 10) || ((j += 2) > 10));
		System.out.println(value2); //true
		System.out.println(num2); //30
		System.out.println(j); //4
        
        int num3 = 20;
        int k = 4;
        
        //논리 합
        //앞의 항이 false이면 뒤의 항도 확인하기 때문에 뒤의 항도 연산이 된다.
        boolean value3 = (((num3 = num3 + 10) < 10) || ((k += 2) < 10));
		System.out.println(value3); //true
		System.out.println(num3); //30
		System.out.println(k); //6
	}

}

 

✖️부호 연산자 : 단항 연산자로 양수/음수의 표현이다. 값의 부호를 결정한다.

✖️산술 연산자 : 사칙연산에 사용되는 연산자이다.


06. 자바의 여러 가지 연산자 (2)

📍복합 대입 연산자

복합 대입 연산자는 대입 연산자와 다른 연산자를 함께 사용한다. 

//복합 대입 연산자
int num1 = 10;
System.out.println(num1 += 1); //11
		
System.out.println(num1 %= 10); //1
		
num1 -= 1; //num1 = num1 - 1;
System.out.println(num1); //0

 

📍조건 연산자

조건 식의 결과가 참인 경우와 거짓인 경우에 따라 다른 식이나 결과가 수행됨.

//조건 연산자
int num = (5 > 3)? 10:20;
System.out.println(num); //10

 

📍비트 연산자

비트 연산자는 노리 연산자와 비슷하지만, bit단위로 논리 연산을 할 때 사용하는 연산자이다. (단, 비트 연산자는 정수에만 사용할 수 있다.)

비트 연산자설명

비트 연산자 설명
& 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산, 1의 보수)
<< 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)
>>> 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 됨.

 

int num1 = 5; //00000101
int num2 = 10; //00001010

int result = num1 & num2; //000000000
System.out.println(result); //0

int result2 = num1 || num2; //00001111
System.out.println(result2); //15

왼쪽 시프트 연산자(<<)는 지정한 수만큼 모든 비트를 전부 왼쪽으로 이동시킨다. 이때 비트의 이동으로 새로 생기는 오른쪽 비트들은 언제나 0으로 채워진다.

오른쪽 시프트 연산자(>>)는 지정한 수만큼 모든 비트를 전부 오른쪽으로 이동시킨다. 이때 비트의 이동으로 새로 생기는 왼쪽 비트들은 양수일 경우에는 모두 0으로 채워지며, 음수일 경우에는 모두 1로 채워진다. 따라서 부호는 변하지 않는다.

int num3 = 5; //00000101

// << left shift연산_ 비트들을 왼쪽으로 이동시킴
System.out.println(num3 <<1); //00001010

//num은 바뀌지 않음
System.out.println(num3); //5

// >> right shift연산
System.out.println(num3 >> 1); //00000010

오른쪽 시프트 연산자(>>>)는 부호 비트까지 포함하여 모든 비트를 전부 오른쪽으로 이동시킨다. 이떄 비트의 이동으로 새로 생기는 왼쪽 비트들은 언제나 0으로 채워진다.

int num4 = 5; //00000101
System.out.println(num4 >>> 1); //00000010