본문 바로가기
Java/정리

[Java] 연산자

by 콧등치기국수 2021. 4. 12.

<JAVA 연산자>

연산자 종류, 우선순위

1. 단항 연산자

1) 전위 연산: 먼저 연산 후 다른 연산 실행 (++)

int a = 10;

int b = ++a;

System.out.println(a + ", " + b);     //결과: 11, 11

 

2) 후위 연산: 다른 연산 우선 실행 후 연산

int a = 10;

int b = a++;

System.out.println(a + ", " + b);     결과: 11, 10

 

** 예시1

: d는 후위연산자(--)로 인해 g값 계산할 때는 2로 연산되지만 1이 담긴다. 

int b = 10;
int d = 2;
int g = (--b) + (d--);              //9 + 2(1) = 11

System.out.println("b = " + b);     //9
System.out.println("d = " + d);     //1
System.out.println("g = " + g);     //11

 

**예시2

: 아래와 같이 하나하나 써보면서 해야 틀리지 않게 할 수 있다!! 

안그러면 되게 헷갈린다...

나는 저렇게 모든 걸 적으면서 하지 않았는데 덕분에 하나가 꼬여서 계속 오답을 냈다...ㅠㅠ

public void method3() {
		int a = 5;
		int b = 10;
		int c = (++a) + b;               //a:6 b:10 c:16
		int d = c / a;                   //a:6 b:10 c:16 d:2
		int e = c % a;                   //a:6 b:10 c:16 d:2 e:4
		int f = e++;                     //a:6 b:10 c:16 d:2 e:4(5) f:4
		int g = (--b) + (d--);           //a:6 b:9 c:16 d:2(1) e:4(5) f:4 g:11
		int h = 2;                       //a:6 b:9 c:16 d:1 e:5 f:4 g:11 h:2
        
		int i = a++ + b / (--c / f) * (g-- - d) % (++e + h);
		//= 6 + 9/ (15 / 4) * (11 - 1) % (6 + 2)
		//= 6 + 9/ 3        *  10      %  8
		//= 6 + 3        *  10      %  8
		//= 6 + 30     %  8
		//= 6 + 6 
		//= 12
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
		System.out.println(e);
		System.out.println(f);
		System.out.println(g);
		System.out.println(h);
		System.out.println(i);

 

 

4) 논리 부정 연산자: !

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

 

5) 비트연산자 : ~

이진수 값 반전시킨다.

0 -> 1 / 1-> 0 으로 반전시킴

 

 

2. 산술연산자

double a = 35;
double b = 10;

double sum = a + b;
System.out.println("a + b = " + sum);    //45.0 -->double이라서
		
double mul = a * b;
System.out.println("a * b = " + mul);    //350.0 --> double이라서
		
double div = a / b;
System.out.println("a / b = " + div);    //3.5

int mul = a * b          // ==> 350

double mul = a / b    // ==> 350.0

 

 

3. 논리 연산자

1) && : 두 연산자가 모두 true일 때 true 반환 (AND)

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

 

 

1. Boolean result = 1 <= num <=100;        ==> 안됨

Scanner sc = new Scanner(System.in);
		
System.out.println("정수하나입력 : ");
		
int num = sc.nextInt();
	
    
boolean result;
		
//사용자가 입력한 num값이 1이상이고 100이하의 값인 가요?
//result = (1 <= num <=100); 안됨

		
result = (num >= 1) && (num <= 100);
		
System.out.println("사용자가 입력한 num값이 1이상이고 100이하의 값인 가요?" + result);

 

2. 사용자 입력 문자 --> 대문자인지 확인

boolean result = (ch >= 'A') && (ch <= 'Z');

System.out.println("문자하나입력 : ");

char ch = sc.next().charAt(0);         //character는 .charAt(0)으로 해준다.

		
boolean result = (ch >= 'A') && (ch <= 'Z');   //문자같은 경우는 숫자값(유니코드)이기 때문에 대소비교 가능
				
System.out.println("사용자가 입력한 문자가 영어 대문자입니까? " + result);

 

3. 

 

** short cut연산

1) a && b 에서 앞에 값(a)이 false이면 b값이 true인지 false인지 상관없이 false이므로 

-> b값은 연산하지 않기때문에 b값은 추정 불가능하다.

int num = 10;
System.out.println("&& 연산전의 num값 : " + num);  //10
		
boolean result1 = (num < 5) && (++num > 0);       //앞이 false이므로 뒤연산(++num)은 수행X
		
System.out.println("result1 : " + result1);       //false

System.out.println("&& 연산후의 num값 : " + num);  //10

int num = 10;

boolean result1 = (num < 5) && (++num > 0); 

 

--> (num<5) 가 true이므로 뒤에 있는 조건인 (++num > 0) 는 실행되지 않는다.

 

 

 

2) a || b 에서 앞에값인 a가 true이면 b는 검사하지 않음

-> b의 값을 추정 불가능하다.

int num = 10;

boolean result2 = (num < 20) || (++num > 0);       //(num < 20) -> true -> (++num > 0) 수행 X
		
System.out.println("result2 : " + result2);

System.out.println("|| 연산후의 num값 : " + num);   //num: 10

// ||연산자를 기준으로 앞에 이미 true가 제시되어있기 때문에 뒤쪽 연산은 수행하지 않는다.

 

 

 

4. 삼항 연산자

if문같이 사용할 수 있고 한줄로 간략하게 사용가능

 

 

1) int형으로 결과 받음 

// 조건식 ? 식1 : 식2;  //참일 경우 식1, 거짓일 경우 식2 실행, 중첩해서 사용가능
/* 조건식 --> 반드시 true 또는 false
 * 조건식 --> 주로 비교, 논리 연산자가 사용된다.
 */
 
int result1 = a < b ? a++ : (b == 0 ? a-- : b++);

→ int 변수명 = 조건식 ? 참일경우 실행할 식 : 거짓일 경우 실행할 식;

 

 

2) boolean으로 결과 받음

boolean isTrue = (num1 == num2) && (num2 == num3);

System.out.println(isTrue);

boolean 변수명 = 조건식;

 

 

 

**예시 (중첩 삼항연산자 & 자료형 변환)

 

: 두 수를 입력받고 , + 또는 -를 입력받아서 알맞은 계산결과를 출력하기
(단, + 또는 - 이외의 다른 문자를 입력하는 경우에는 "잘못 입력하였습니다." 출력)

Scanner sc = new Scanner(System.in);
		
System.out.println("정수1 입력: ");
int num1 = sc.nextInt();
		
System.out.println("정수2 입력: ");
int num2 = sc.nextInt();
		
sc.nextLine();                                        //버퍼 제거
		
System.out.println("연산자 입력(+ 또는 -) : ");
char op = sc.nextLine().charAt(0);
		
		
String result = op =='+' ? String.valueOf(num1+num2) : ((op=='-') ? num1-num2+"" : "잘못 입력하였습니다.");

//int형 --> string 전환 하는 2가지 방법
/* String.valueof(정수)
 * 정수 + "" 
 * */
		
System.out.println("결과" + result);

▶ int형 → string 전환

1) String.valueOf(정수)

2) 정수 + ""

 

 

 

 

 

출처: KH정보교육원 기초동영상