코딩 기록들
[Java Programming] 2.1 연산자(산술, 비교, 논리 연산자) 본문
++
--
연산자는 위치에따라 선/후 수행 처리를 함 (증감을 먼저하거나 나중에 함)
- 연산자가 숫자 '뒤'에 붙어있으면 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
'Java' 카테고리의 다른 글
[Java Programming] 3.1 실행흐름 제어 - 조건문 (while, for) (1) | 2024.01.19 |
---|---|
[Java Programming] 2.2 실행흐름 제어 - 조건문 (if~else if ~ else, Switch) (0) | 2024.01.18 |
[Java Programming] 1.3 자바 프로그래밍 기초(연산자) (0) | 2024.01.17 |
[Java Programming] 1.2 자바 프로그래밍 기초(자료형, 변수, 상수, 형변환) (0) | 2024.01.17 |
[Java Programming] 1.1 이클립스 설정 (0) | 2024.01.17 |