연산이란 데이터를 처리하여 결과를 산출하는 것이다.
연산자란 연산에 사용되는 표시나 기호이다.
+, -, *, /, %. =. ...
피연산자란 연산 대상이 되는 데이터이다. (리터럴, 변수)
연산식이란 피연산자를 이용하여 연산의 과정을 기술한 것이다.
피연산자가 1개인 연산자이다.
부호 연산자 : +, - Boolean 타입과 char 타입을 제외한 기본 타입에 사용 가능하다.증감 연산자 : ++, -- 변수의 값을 1증가 시키거나(++) 1감소(--) 시키는 연산자이다.논리 부정 연산자 : ! Boolean type 에만 사용 가능하다.int n = 100;
int n2 = +n;
int n3 = -n;
System.out.println(n2); //100
System.out.println(n3); //-100
int n4, n5;
n4 = +n3; //+(-100) = -100
n5 = -n3; //-(-100) = +100
System.out.println(n4); //-100
System.out.println(n5); //100
short s = 10;
//short s2 = -s; short <- int
//부호연산자의 결과는 int로 저장되므로
//int 이하 정수형의 부호 연산은 컴파일 에러가 발생한다.
long l = -n; // long <- int long타입이 더 크니 가능하다.
int x = 10;
int y = 10;
System.out.println(x); //10
x++; // 1을 더하겠다.
++x; // 1을 더하겠다.
System.out.println(x); //12
System.out.println(x++); //12
//x = 13
System.out.println(x++); //13
//x = 14
System.out.println(++x); //15
System.out.println(y); //10
y--; // 1을 빼겠다.
--y; // 1을 빼겠다.
System.out.println(y); //8
System.out.println(--y); //7
System.out.println(y--); //7
//y = 6
// x = 15
Check Point!!!
증감 연산자가 앞에 붙으면 증감 연산을 먼저 수행한다.
증감 연산자가 뒤에 붙으면 그 다음 줄에 증감 연산을 수행한다.
boolean running = true;
System.out.println( !running ); //false
boolean walking = false;
System.out.println( !walking ); //true
running = !running;
System.out.println(running); //true
피연산자가 2개인 연산자이다.
산술연산자 +, -, *, /, % : boolean 타입을 제외한 모든 기본 타입에 사용 가능하다.문자열 연결 연산자 +대입 연산자 =, +=, -=, *=, /=. %=, &=, ^=, |=, <<=, >>=, >>>= : 가장 낮은 연산 순위이다.비교 연산자 <, <=, >, >=, ==, !=논리 연산자 &&, ||, &, |, ^, ! : 피연산자는 boolean 타입만 사용 가능하다.비트 논리 연산자 &, |, ^비트 이동 연산자 <<, >>, >>>int x =10;
int y = 4;
System.out.println(x+y); //14
System.out.println(x-y); //6
System.out.println(x*y); //40
System.out.println(x/y); //2
System.out.println(x%y); //2
double a = 10;
double b = 4;
System.out.println(a/b); //2.5 //실수형이므로 소수점까지 출력된다.
System.out.println(x/y); //2 //정수형이므로 몫만 출력된다.
System.out.println( (double)x/y); //2.5
System.out.println( x/(double)y); //2.5
System.out.println( (double)x/(double)y); //2.5
System.out.println(a/y); //2.5
System.out.println( (double)(x/y));
// (double)2.0
// 정수형 (x/y)가 먼저 계산되고 실수형으로 변환되었다.
// int + int = int
// int + double = double
// int / int = int
// double / double = double
// int / double = double
// double / int = double
// 피연산자가 하나라도 실수형이면 실수형으로 계산된다.
// 피연산자가 3개 이상이면 실수형이 처음 실행되는 연산에 참여해야 실수형으로 계산된다.
// ex) ( a * b / c ) 를 실행할 때 a 또는 b가 실수형이어야함!
int num1 = 5;
int num2 = 3;
System.out.println(num1 == num2); //false
System.out.println(num1 != num2); //true
boolean bl1 = !(num1 > num2);
boolean bl2 = num1 <= num2;
boolean bl3 = num1 < num2 + 10;
System.out.println(bl1); //false
System.out.println(bl2); //false
System.out.println(!bl3); //false
System.out.println(bl3); //true
System.out.println( !((9/3) == (10%7)) ); //true
문자열도 같은지 다른지 비교가 가능하다.
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println( s1 == s2 ); //true
//문자열.equals(문자열)
System.out.println( s1.equals(s2) ); //true
System.out.println( s1 == s3 ); //false
System.out.println( s1.equals(s3)); //true
== 기본타입 : 값이 같은지 비교한다.
== 객체타입 : 주소가 같은지(같은 객체인지) 비교한다.
.equals() : 문구가 같은지 비교한다. 문자열 비교에 유용하다.
int num1 = 100;
int num2, num3;
num2 = num3 = 200;
System.out.println(num1); //100
num1 += 50; //num1 = num1 + 50
System.out.println(num1); //150
num1 -= 30; //num1 = num1 - 30
System.out.println(num1); //120
num1 *= 2; //num1 = num1 * 2
System.out.println(num1); //240
num1 /= 50.0; // num1 = num1 / 50.0
System.out.println(num1); //4
//num1이 4가 출력되었다. -> 실수형으로 대입되지 않았다.
//num1 = num1 / 50.0; -> 풀어서 코드를 작성하는 것이 안전하다.
num1 %= 3; //// num1 = num1% 3
System.out.println(num1); //1
boolean result;
result = (10 == 10) && (20 == 20);
// true true
System.out.println( result ); //true
result = (5>3) && (6<4);
// true false
System.out.println( result ); //false
result = (10>20) || (1>0);
// false true
System.out.println( result ); //true
AND(&&) 연산은 두 개의 값이 모두 true여야만 true기 리턴된다.
OR(||) 연산은 둘 중 하나의 값만 true여도 true가 리턴된다.
세 개의 피연산자를 필요로 하는 연산자이다.
앞의 조건식 결과에 따라 콜론 앞 뒤의 피연산자를 선택한다.
int score = 95;
char grade = (score > 90) ? 'A': 'B';
//90보다 크면 A고 나머지는 다 B
//조건식이 true면 앞부분('A'), false면 뒷부분('B')이 출력된다.
//삼항 연산자의 중첩
char grade2 = (score > 90) ? 'A': (score > 80 ? 'B' : 'C');
//90보다 크면 A고 80보다 크면 B 그 외에는 C
char grade3 = (score > 90) ? 'A': (score > 80 ? 'B': (score > 70 ? 'C' : 'D'));
//90보다 크면 A고 80보다 크면 B 70보다 크면 C 그 외에는 D
//90보다 크면 A
//90보다 클 때 -> 95보다 크면 S 아니면 그냥 A
char grade4 = (score > 95) ? 'S': (score > 90) ? 'A': (score > 80 ? 'B': (score > 70 ? 'C' : 'D'));
char grade5 = (score > 90) ? (score > 95 ? 'S' : 'A'): (score > 80 ? 'B': (score > 70 ? 'C' : 'D'));
System.out.println(grade5); //A
(교재 : 이것이 자바다/저자 신용권)