class op
{
public static void main(String[] args)
{
//연산자, Operator
// - 피연산자를 사용해서 (미리 정해진)연산을 한 수에 결과값을 반환하는 역할
//1. 산술 연산자
// - +, -, *, /, %(mod, 나머지)
// - 이항 연산자(2항) : 피연산자의 갯수
//int result = 1 + 2 x 3 - 4; //문장, 1개이상의 표현식
int a = 10;
int b = 3;
System.out.println(a + b); //13
System.out.println(a - b); // 7
System.out.println(a * b); //30
//피연산자 중 더 큰자료형으로 반환한다.
//정수 / 정수 = 정수(반올림x, 소수이하는 버림)
//실수 / 실수 = 실수
//정수 / 실수 = 실수
//실수 / 실수 = 실수
System.out.println(a / (double)b); // 3, 정수int/정수int로 했기때문에 나머지출력x -> 보고싶다면 (double)입력
System.out.println(a / 3); //반올림x, 소수이하 버림**
System.out.println((double)a / 3);
System.out.println(a / 3.0); //***
System.out.println(a % b); // 1
//2. 비교 연산자
// - 피연산자들의 비교 우위를 반환하는 역할
// - >, >=, <, <=, ==(equal), !=(not equal)
// - 연산의 결과를 항상 boolean값(true/false)으로 반환
// - 이항 연산자
System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
System.out.println(a == b); //*갯수주의
System.out.println(a != b);
//(****)문자열 비교(****)
String str1= "홍길동";
String str2= "홍길동";
String str3= "홀";
str3 = str3 + "길동"; //"홍길동"
int n1 = 10;
int n2 = 10;
int n3 = 2 * 5;
System.out.println(n1 == n2);
System.out.println(str1 == str2);
System.out.println(n1 == n3);
System.out.println(str1 == str3);
System.out.println(str1); //*
System.out.println(str3); //*
//문자열 상수(변수)의 비교는 ==(equal) 사용을 하면 안됨!! *****중요!!
// -> equals() 메소드를 사용해야
System.out.println(str1.equals(str2)); //str1 == str2
System.out.println(str1.equals(str3)); //str1 == str3
//3.논리 연산자
// - 각각의 논리 연산 행동에 따른 결과값 반환
// - &&(and), ||(or), !(not)
// - 피연산자를 boolean값을 가지고 자신의 연산 결과도 boolean값을 반환한다.
//and, 좌우측 중 한쪽만 불만족시켜주면 F
// A && B
// T && T = T
// T && F = F
// F && T = F
// F && F = F
// T && T && T && T = T
//or, 좌우측 중 한쪽만 만족시켜주면 T
// A || B
// T || T = T
// T || F = T
// F || T = T
// F || F = F
// T || F || F || F = T
boolean b1 = true;
boolean b2 = false;
System.out.println(b1 && b2);
System.out.println(b1 || b2);
//요구사항] 입력받은 나이가 20세이상 60세미만?
int age = 25;
//비교연산자 > 논리연산자 (비교연산자가 논리연산자보다 먼저 계산됨) **
//System.out.println(20 <= age < 60); 하면,
//20 <= age < 60
// treu < 60 로 출력되기 때문에 쪼개야함..
//System.out.println(20 <= age && age < 60);
//-> System.out.println(true && true);
System.out.println((20 <= age) && (age < 60));
//빨강, 노랑, 파랑 -> 통과
//그외의 색상 -> 거절
String color = "검정";
//System.out.println(color == "빨강" || color="노랑" || color="파랑");
System.out.println(color.equals("빨강") || color.equals("노랑") || color.equals("파랑"));
//! :단항 연산자(1항 연산자)
boolean flag = true;
System.out.println(!flag);
//4. 대입(할당) 연산자
// - =, +=,-=, *=, /=, %=
// - LValue(공간,변수) = RVlaue(값,변수,상수)
// - LVlaue와 RValue의 자료형은 일치해야 한다. !! ***
// - 연산자 우선 순위 가장 낮음
// += : 복합 대입 연산자
int n = 10;
n = n + 1; //누적, 출력-> n=11;
n += 1; //위에 있는 값을 줄인 표현 (n=n+1;)
System.out.println(n); //12
n -= 1; // n = n - 1;
System.out.println(n); //11
n *= 3; // n = n * 3;
System.out.println(n); //33
n /= 4; // n = n / 4;
System.out.println(n); //8
n %= 3; // n = n % 3;
System.out.println(n); //2
//대입 연산자는 '우측 -> 좌측'으로 진행됨 *
int o, p, q, r;
o = p = q = r = 10;
//5. 증감 연산자
// - ++(증가), --(감소)
// - 기존의 값을 +1, -1 해라
// - 단항 연산자
// - 연산자 우선 순위 최상위
// - 피연산자의 위치가 변함 ***
// a. ++n : 접두어(Prefix) -> 우선순위 최상
// b. n++ : 접미어(Postfix) -> 우선순위 최하
n = 10;
//n = n + 1;
//n + = 1;
++n; //누적, n값에 1을 더해 덮어써라
System.out.println(n); //11
//n = n -1;
//n -= 1;
--n;
System.out.println(n); //10
//n++; //자기자신에게 1을 더한다
//System.out.println(n); //11
n = 10;
int result = 0;
//증감 연산자는 한문장에 다른 연산자와 같이 쓰지 말것
//문장1개에 증감 연산자1개를 쓴다
//result = 10 + n;
//n++;
//result = 10 + ++n;
// 3 2 1 -> 우선순위
// n
// 21
System.out.println(result); // 21
result = 10 + n++;
// 2 1 3
System.out.println(result); // 21
System.out.println(n); // 12
//int o = 10;
//System.out.println(--o - o--);
//6. 조건 연산자
// - A ? B : C
// - 삼항 연산자 (3항 연산자)
// - A라는 조건식(boolean값 변환)을 만족하면 연산의 결과로 B를 반환하고 만족하지 못하면 C를 반환한다.
// - if문
age = 25;
//성년? 미성년?
String result2 = (age >= 19) ? "성년" : "미성년"; //피연산자 A=19, 출력-> 만족하는 값이므로 "성년"
System.out.printf("나이 %d살은 %s입니다.\n", age, result2);
int m1 = 10;
int m2 = 50;
int max = 0;
max = m1 > m2 ? m1 : m2;
System.out.println(max);
//연산자 우선 순위
// ()소괄호 > 증감(prefix) -> 산술
// > 비교 > 논리 > 대입 > 증감(postfix)
//한문장 내에서 동일한 수준의 연산자들간의 우선순위
//1. 대부분 : 좌 -> 우
//2. 대입, 증감 : 우 -> 좌
//숏 서킷 룰(short curcuit rule)
// - && 연산은 왼쪽이 false이면 오른쪽을 실행안함
// - || " true "
//age = 5;
//(age > 10) && (age < 50)
}
}