코딩 기록들

[Java Programming] 2.1 연산자(산술, 비교, 논리 연산자) 본문

Java

[Java Programming] 2.1 연산자(산술, 비교, 논리 연산자)

코딩펭귄 2024. 1. 18. 11:27
++ 
--

연산자는 위치에따라 선/후 수행 처리를 함 (증감을 먼저하거나 나중에 함)

- 연산자가 숫자 '뒤'에 붙어있으면 1. 출력을 하고, 2. 그이후에 증감 한다

- 연산자가 숫자 '전'에 붙어있으면 1. 증감을 하고, 2. 그이후에 출력 한다

 

스스로에게 1을 더하고 빼는 코드 예제

int num1 = 10;
		
System.out.println(num1++); //10 후처리 : 10을 먼저 출력한 다음 1 더하기
System.out.println(num1); //11 
System.out.println(num1--); //11 후처리 : 11인 num1에서 1을 먼저 출력한 다음 1 빼기
System.out.println(num1); //10 
System.out.println(--num1); //9 전처리 : 10인 num1에서 1을 먼저 뺀 다음 출력하기

 

예제) 섭씨 30도를 화씨온도로 변경하면 화씨 86도가 됨
섭씨온도를 화씨로 변경해 fahrenheit변수에 할당하고 출력 (변경공식: (섭씨 × 9/5) + 32 = 화씨)

int celsius = 30;
int farhrenheit = 0;
farhrenheit = (celsius * 9/5) + 32;
System.out.println(farhrenheit);
       
       
//만약, 공식이 (섭씨 × 1.5) + 32 = 화씨 라면?
//방법 1
farhrenheit = (int) ((celsius * 1.5) + 32); 
/* int형 celsius, double형 1.5 연산 -> double형
double형 + 32 -> double형이므로, int형인 farhrenheit에 값을 넣기위해서는 int로 형변환 해줘야됨*/

//방법 2
//farhrenhiet를 double로 선언하고, 아래 코드 수행
farhrenheit = (celsius * 1.5) + 32;

 

 

비교연산자

비교연산자의 결과는 항상 boolean이 나온다. true/ false값으로 나옴

 

//비교연산자의 결과는 항상 boolean(true/false) 이다
int num1 = 10;
int num2 = 5;
		
System.out.println(num1 == num2); // 1st (num1==num2) 가 먼저 실행되고, 그 다음 2nd 출력됨

boolean isEquals = num1 == num2;
boolean isNum1GreaterThanNum2 = num1 > num2;
boolean isNum1GreaterOrEqualsThanNum2 = num1 >= num2;
boolean isNum1LessThanNum2 = num1 < num2;
boolean isNum1LessOrEqualsThanNum2 = num1 <= num2;
boolean isNotEquals = num1 != num2;
		
System.out.println(isEquals); //false
System.out.println(isNum1GreaterThanNum2); //true
System.out.println(isNum1GreaterOrEqualsThanNum2); //true
System.out.println(isNum1LessThanNum2); //false
System.out.println(isNum1LessOrEqualsThanNum2); //false
System.out.println(isNotEquals); //true

 

** 파이썬과 달리 자바는, 같은우선순위를 가지기 때문(좌측부터 우측으로 연산 진행)에 아래와같은 비교는 할 수 없다

int num1 = 10;
    int num2 = 5;
    int num3 = 3;
	boolean isGreaterThanAll = num2 < num1 > num3;  
    // num2 < num1 = true
    // true > 3 연산 불가능
}

-> 논리연산자를 사용하면 위와 같은 비교를 할 수 있다

 

 

논리연산자

- 비교연산자 2개를 놓고, 그것이 올바른 조건인지 아닌지 판단

- 논리연산자의 피연산자(아래 표에서 a, b)는 항상 불린 -> 논리연산의 결과도 불린

Java는 부정연산을 하는게 없다 ( = 문자열과 문자열이 같다, 포함되어있다, ~로 시작한다, ~로 끝난다 등등의 연산은 있지만, 이와 반대되는 (다르다, 포함되어있지 않다, ~로 시작하지 않는다, ~로 끝나지 않는다 등의 연산이 없음) 연산은 없음)

 -> 따라서, ! 부정연산을 많이 함께 사용하게 됨

 

예제) num1이 num2보다 크다. 그리고 num3보다 커야한다. 

    int num1 = 10;
    int num2 = 5;
    int num3 = 3;
    boolean isGreaterThanAll = num2 < num1 && num1 > num3; 
    System.out.println(isGreaterThanAll); //true
	
    // num2 < num1 = true, num1 > num3 = true -> 두개를 && 연산하면 true

 

 

논리연산자 줄이기

isAdd = isadd && 5 < 15; 일때, -> isAdd &= 5<15; 쓸수있다

&=, |= 은 줄여쓰기 가능하지만, != 은 이미 존재하기때문에 줄여쓰기 불가능

 

 

 

Loss를 줄이기 위한 예제 (&&, ||)

and연산시 빠른 연산 예제

and연산을 할 때에는, false가 될수있는 가능성이 높은것을 첫번째에 쓴다 -> dead code 판별이 쉬워지므로 시간단축됨

첫번째 피연산자가 false -> 두번째 피연산자는 검증하지않아도 결과는 false

	// &&연산 
    // 첫 번째 피연산자가 true 이기 때문에 두 번째 피연산자가 true인지 검증이 필요
	boolean and = true && true;
	System.out.println(and); // true
	and = true && false;
	System.out.println(and); // false
		
    // 첫번째 피연산자가 false이기때문에 두번째 피연산자는 검증하지않아도 결과는 false
	and = false && true; // dead code 
	System.out.println(and); // false
	and = false && false; // dead code
	System.out.println(and); // false
or 연산시 빠른 연산 예제

or연산 : true가 될 가능성이 높은것을 첫번째 위치에 쓴다

첫 번째 피연산자가 true -> 두 번째 피연산자를 검증하지 않아도 결과는 true

	// 첫 번째 피연산자가 true 이기 때문에 두 번째 피연산자를 검증하지 않아도 결과는 true로 확정이 됩니다.
	// 즉, 두 번째 피연산자는 dead code가 됨
    boolean or = true || true; // dead code
	System.out.println(or); // true
	or = true || false; // dead code
	System.out.println(or); // true
	
    //첫 번째 피연산자가 false 이기 때문에 두 번째 피연산자가 true인지 검증이 필요
	or = false || true;
	System.out.println(or); // true
	or = false || false;
	System.out.println(or); // false

 

!연산 예제 (String연산에서 자주 사용됨)

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

 

 

 

산술연산자, 비교연산자와 논리연산자의 동시 사용

연산자 우선순위  : 산술> 비교 > 논리

		//1. 변수 a의 값이 10보다 크고 20보다 작은가?
		int a = 10;
		boolean is11To19 = a > 10 && a < 20;
		System.out.println(is11To19); // false
		
		//2. 변수 b는 짝수인가?
		int b = 12345;
		boolean isEven = b % 2 == 0;
		System.out.println(isEven); // false

		//3. 변수 c는 0보다 큰 짝수인가?
		int c = - 4576;
		boolean isEven2 = c > 0 && c % 2 == 0;
		System.out.println(isEven2); // false
		
		//4. 변수 d의값은 2또는 5의 배수인가?
		int d = 35;
		boolean isMultiple2Or5 = d % 2 == 0 || d % 5 == 0;
		System.out.println(isMultiple2Or5); //true
		
		//5. son은 부모님과 함께 12세 이상 관람과의 영화를 볼수있나?
		int son = 7;
		int parent = 40;
		boolean isAvailable = son >= 12 || parent >= 12;
		System.out.println(isAvailable); //true
		
		// 6. 변수 e의 값은 3의 배수가 아닌가?
		int e = 35;
		boolean isNotMultiple3 = e % 3 != 0; //방법1
		System.out.println(isNotMultiple3); //true
		
		isNotMultiple3 = !(e % 3 == 0);   //방법2
		System.out.println(isNotMultiple3); //true