본문 바로가기

Java/공부

[Java] 연산자 ( Operator )

연산자 종류우선순위

종류 구분 세부구분 연산자 우선순위
최우선 연산자 직접 접근 연산자   ( )  [ ] 1
단항 연산자     +  -  !  (자료형) ++  --  ~ 2
3이항 연산자 산술 연산자   *  /  % 3
+  - 4
비교 연산자   >  <  >=  <= 5
==  != 6
논리 연산자 일반 논리 연산자 && 7
|| 8
삼항연산자     (조건식)? 참일때 조건식 : 거짓일때 조건식 9
대입연산자 순수대입   = 10
산술대입   +=  -=  *=  /=  %= 11

* 이외에 비트 논리 연산자, 쉬프트 대입 등이 있지만 잘 사용하지 않아 생략하였음

 

산술 연산자

- 일반 수학과 동일한 연산방법, 우선순위를 갖는 연산자. 단, %는 나누기의 나머지 값을 구하는 연산자이다.

- 종류 : + 덧셈, - 뺄셈, * 곱셈, / 나눗셈, % 나머지값을 구하는 연산자

 

ex) 정수 2개를 입력받아 연산을 해보자

		Scanner sc = new Scanner(System.in);
				
		System.out.print("정수입력 1: ");
		int input1 = sc.nextInt();
		
		System.out.print("정수입력 2: ");
		int input2 = sc.nextInt();
		
		System.out.printf("%d / %d = %d\n", input1, input2, input1/input2);
		System.out.printf("%d %% %d = %d\n", input1, input2, input1%input2);

 

증감 연산자

- 피연산자의 값에 1을 더하거나 빼는 연산자로 위치에 따라 결과값이 다르게 나타나는 연산자.

- 종류 : ++, -- 

- 사용법 : 전위연산(먼저 연산 후 타 연산 실행),

                  후위연산(타 연산 우선실행 후 연산)

 

ex) 전위연산

		// 전위연산 : 다른연산자보다 먼저 증가/감소

		int iNum1 = 10;
		int iNum2 = 10;
		
		++ iNum1;
		-- iNum2;
		
		System.out.println("iNum1="+iNum1); // 11출력
		System.out.println("iNum2="+iNum2); //  9출력
		
		int temp1 = 5;
		System.out.println( ++temp1 + 5 ); //  11출력

 

ex) 후위연산

		// 후위연산 : 다른연산자보다 나중에 증가/감소

		int iNum1 = 10;
		int iNum2 = 10;
		
		iNum1++; // 10 + 1
		iNum2--; // 10 - 9
		
		System.out.println("iNum1="+iNum1); // 11 출력
		System.out.println("iNum2="+iNum2); //  9 출력

		int temp2 = 3;
		System.out.println( temp2-- + 2 ); // 5 출력
		System.out.println( temp2 );       // 2 출력
		
		int a = 3;
		int b = 5;
		int c = a++ + --b; // 3 + 4 = 7
		
		System.out.printf("%d / %d / %d\n", a,b,c); // 4 / 4 / 7

 

비교 연산자

- 데이터의 값을 비교하는 연산자, 결과값은 항상 논리값 (True, False)로 나타나는 연산자

- boolean과 참조형을 제외한 모든 자료형에 사용 가능

 

1) 데이터가 같은지, 다른지 비교할 때 사용하는 연산자

- a == b : a와 b가 같으면 true

- a != b :  a와 b가 다르면 true

 

ex) 

		int a = 10;
		int b = 20;

		System.out.println(a==b); // a는 b와 같다;   False 출력
		System.out.println(a!=b); // a는 b와 다르다; True  출력

 

2) 두 피연산자의 값의 크기를 비교하는 연산자

- a > b : a가 b보다 크면 true

- a < b : a가 b보다 작으면 true

- a >= b : a가 b보다 크거나 같으면 true

- a  <= b : a가 b보다 작거나 같으면 true

 

ex) 

		int a = 10;
		int b = 20;
		
		System.out.println(a>b); // FALSE
		System.out.println(a<b); // TRUE
        
      	        int c = 4;
		int d = 5;
		
		System.out.println(c>d);      // FALSE
		System.out.println(c+1 <= d);  // TRUE
		System.out.println(c >= d-1); // TRUE

 

ex ) 주어진 값이 홀수인지 짝수인지 구분하는 식

		int temp = 123;
				
		System.out.println("temp는 짝수인가? " + (temp%2==0)); // FALSE
		System.out.println("temp는 짝수인가? " + (temp%2!=1)); // FALSE
		
		System.out.println("temp는 홀수인가? " + (temp%2==1)); // TRUE
		System.out.println("temp는 홀수인가? " + (temp%2!=0)); // TRUE

 

▶  논리 연산자

- 논리 값 두 개를 비교하는 연산자

- 종류 : && (두 피연산자가 모두 true일 때 true 반환 = AND)

                ||  (두 피연산자 중 하나만 true여도 true반환 = OR)

 

ex) && 연산자 (AND)

		int a = 100;
		System.out.println("a는 100이상이면서 짝수인가? "+((a>=100)&&(a%2==0))); // TRUE
		
		int b = 5;
		System.out.println("b는 1~10사이의 숫자인가? "+((10>=b)&&(b>=1))); // TRUE

 

ex) || 연산자 (OR)

		int c = 10;
		System.out.println("c는 10초과이거나 짝수인가?"+((c>10)||(c%2==0))); // TRUE

 

논리 부정 연산자

- 논리 값을 부정하여 반대 값으로 변경, 제어문 활용시 많이 쓰임

- !___

 

ex)  단순 논리 부정

		boolean bool1 = true;
		boolean bool2 = !bool1;
		
		System.out.println("bool1= "+bool1); // true
		System.out.println("bool2= "+bool2); // false

 

ex) 정수를 입력받아, 해당정수가 1-100사이값인지, 혹은 1-100사이값이 아닌지 확인하는 식

		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수를 입력하세요 : ");
		int input = sc.nextInt();
		
		// 입력받은 정수가 1이상, 100이하값인지 확인
		boolean result1 = 1<=input && input<=100;
		System.out.printf("%d 은/는 1이상, 100이하의 정수인가? : %b\n",input,result1);
		
		// 입력받은 정수가 1미만, 100초과값인지 확인
		boolean result2 = input<1 || input>100; //반대의 경우 OR 연산을 사용해야함!!
		boolean result3 = !result1;
		System.out.printf("%d 은/는 1미만, 100초과의 정수인가? : %b\n",input,result2);
		System.out.printf("%d 은/는 1미만, 100초과의 정수인가? : %b\n",input,result3);

 

복합 대입 연산자

- 다른 연산자와 대입 연산자가 결합한 것으로, 자기 자신과 연산 후 결과를 자기 자신에게 누적 대입하는 연산자

- 증감 연산자는 1씩 증가 혹은 감소시키는 연산자이지만,

  대입연산자는 원하는 값을 증가시키고 그 변수에 저장하는 연산자이다.

a += 10 a = a + 10
a -= 10 a = a - 10
a *= 10 a = a * 10
a /= 10 a = a / 10
a %= 10 a = a % 10

 

ex) 

		int a = 10;
		
		// a에 1을 증가시키고 싶은 경우
		a= a+1; // a++; a+=1;
		System.out.println("a를 1증가 : "+a); 
		
		//  a에 4를 증가시키고 싶은 경우
		a +=4;
		System.out.println("a를 4증가 : "+a);
		
		// a를 10 감소시키고 싶은 경우
		a -= 10;
		System.out.println("a를 10감소 : "+a);
		
		// a를 3배 증가시키고 싶은 경우
		a *= 3;
		System.out.println("a를 3배증가 : "+a);
		
		//a를 6으로 나눴을 때 몫
		a /= 6;
		System.out.println("a를 6으로 나눈 몫 : "+a);
		
		//a를 2로 나눈 나머지
		a %= 2;
		System.out.println("a를 2로 나눈 나머지 : "+a);

 

삼항 연산자

- 조건식의 결과 값에 따라 연산을 처리하는 방식, 값이 참일경우 식1, 거짓일경우 식2를 수행하는 연산자

- 삼항 연산자 안에 삼항 연산자를 중첩하여 사용할 수 있다

- [작성법] 삼항연산자 ? 식 1 : 식 2

 

ex) num은 30보다 크면 num 은 30보다 큰 수, 아니면 num은 30이하의 수이다 출력하기

		int num = 30;

		String str1 = "num 은 30보다 큰 수";
		String str2 = "num 은 30이하의 수";
		String result = num > 30 ? str1 : str2;
		
		System.out.println(result); // num 은 30이하의 수 출력

 

ex) 입력받은 정수가 양수인지, 음수인지 구분하기 (단, 0은 양수로 가정)

		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int input = sc.nextInt();
		
		String result1 = input >=0 ? "양수" : "음수";
		
		System.out.println("입력한 정수는 " + result1 + "입니다.");
		System.out.println((input >=0 ? "양수" : "음수") + "입니다");