study/TIL
20241013 TIL
으녕오리
2024. 10. 14. 08:57
<Java 문법 종합반 2주차>
연산자, 조건문과 반복문, 배열, 다차원 배열, 컬렉션
chatper 3. 연산자
- 피연산자 : 계산의 대상이 되는 것 ( 2 + 1 에서 2 와 1)
- 연산자 : 계산의 목적이 되는 것 ( 2 + 1 에서 + )
* 모든 토글을 열고 닫는 단축키
Windows : Ctrl + alt + t
Mac : ⌘ + ⌥ + t
* Java에서 폴더는 package
- 사칙연산
package week02;
public class w02 {
public static void main(String[] args){
// 사칙연산 : +, -, *, /, %
System.out.println(4 + 2); //6
System.out.println(4 - 2); //2
System.out.println(4 * 2); //8
System.out.println(4 / 2); //2
System.out.println(5 / 2); // *2
System.out.println(2 / 4); // *0
System.out.println(4 % 2); //0
System.out.println(5 % 2); //1
// 우선순위 연산
System.out.println(2 + 2 * 2); //6
System.out.println((2 + 2) * 2); //8
// 변수를 이용한 연산
int a = 20;
int b = 10;
int c;
c = a + b;
System.out.println(c); //30
c = a - b;
System.out.println(c); //10
c = a * b;
System.out.println(c); //200
c = a / b;
System.out.println(c); //2
c = a % b;
System.out.println(c); //0
}
}
- 비교연산자
package week02;
public class w03 {
public static void main(String[] args) {
System.out.println(10 > 9); // 10이 9보다 크니? 응! -> true
System.out.println(10 >= 9); //true
System.out.println(10 < 9); //false
System.out.println(10 <= 9); //false
System.out.println(10 == 10); //true
System.out.println(10 == 9); //false
System.out.println(10 != 10); //false
System.out.println(10 != 9); //true
}
}
- 논리연산자
- 비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자
- 조건을 연결했을 때 boolean 값들을 조합하여 참(true) 또는 거짓(false) 값인 boolean 값을 출력
- ||(OR), &&(AND), !(NOT)
package week02;
public class w04 {
public static void main(String[] args) {
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = false;
System.out.println(flag1); //true
System.out.println(flag2); //true
System.out.println(flag3); //false
// (1) 피연산자 중 하나라도 true이면 true => 또는(OR : ||)
System.out.println(flag1 || flag2); //true
System.out.println(flag1 || flag2 || flag3); //true
System.out.println((5 > 3) || (3 > 1)); //true 또는 true 이므로 -> true
System.out.println((5 > 3) || (3 < 1)); //true
System.out.println((5 < 3) || (3 < 1)); //false
// (2) 피연산자가 모두 true이면 true => 그리고(AND : &&)
System.out.println(flag1 && flag2); //true
System.out.println(flag1 && flag2 && flag3); //false
System.out.println((5 > 3) && (3 > 1)); //true 이고 true 이므로 -> true
System.out.println((5 > 3) && (3 < 1)); //false
// System.out.println(1 < 3 < 5); -> 불가능!
// (3) 논리 부정 연산자(! : NOT) (뒤집은 값)
System.out.println(!flag1); //false
System.out.println(!flag3); //true
System.out.println(!(5 == 5)); //false
System.out.println(!(5 == 3)); //true
}
}
- 대입연산자
- 변수를 바로 연산해서 그 자리에서 저장하는(대입하는) 연산자
- =(기본대입연산자), +=, -=, *=, ... (복합대입연산자)
- ++ : += 1
- -- : -= 1
package week02;
public class w05 {
public static void main(String[] args) {
// 기본 대입 연산자
int number = 10;
number = number + 2;
System.out.println(number); //12
number = number % 2;
System.out.println(number); //0
// 복합 대입 연산자
number = 10;
number += 2; // number = number + 2;
System.out.println(number); //12
number -= 2; // number = number - 2;
System.out.println(number); //10 (***8이 아니다)
// ++, --
// number++;
// number = number + 1;
// number += 1;
// 위의 세 줄 다 같은 말임
number++;
System.out.println(number); //11
number--;
System.out.println(number); //10(11-1)
}
}
- 대입연산자에서 주의해야 할 점 !!
package week02;
public class w06 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int val = ++a + --b; // 11 + 9 = 20 (* +와 -를 숫자 "앞에" 써줘야함!)
System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val); // 20
int c = 10;
int d = 10;
int val2 = ++c + d--; // c는 연산 전에 +1, d는 연산 후에 -1
System.out.println(c); //11
System.out.println(d); //9
System.out.println(val2); //21
// 21인 이유 -> c는 연산 전에 수행되어서 11로 연산되지만, d는 연산 후에 수행되어서 10으로 연산된 후 -가 수행되었기 때문에
}
}
- 기타연산자
package week02;
public class W07 {
public static void main(String[] args) {
// (1) 형변환 연산자
int intNumber = 93 + (int)98.8; // 93 + 98
System.out.println(intNumber);
double doubleNumber = (double) 93 + 98.8; //93.0 + 98.8
System.out.println(doubleNumber);
// (2) 삼항연산자
// 비교연산자와 항상 함께 쓰인다.
// 비교연산자의 결과인 true or false 의 값에 따라 결정되는 무언가
// 조건 ? 참 : 거짓
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
System.out.println(b); //false
String s = (x != y) ? "정답" : "오답";
System.out.println(s); //정답
int max = (x > y) ? x : y;
System.out.println(max); // *9
int min = (x < y) ? x : y;
System.out.println(min); //1
// (3) instance of(3주차 -> 클래스, 객체)
// 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
// 맞으면 -> true, 틀리면 -> false
}
}
- 연산자 우선순위
- 산술 > 비교 > 논리 > 대입
package week02;
public class W08 {
public static void main(String[] args) {
int x = 2;
int y = 9;
int z = 10;
boolean result = x < y && y < z; // 우선순위대로 <,> 계산 후 && 계산
System.out.println(result); // true
result = x + 10 < y && y < z; // +10 계산 후 <,> 계산 후 && 계산 // **false && ~~ 이면 무조건 false!!!
System.out.println(result); // false
}
}
- 산술 변환
- 연산 전에 피연산자의 타입을 일치시키는 것
- 둘중에 저장공간 크기가 더 큰 타입으로 일치시킨다. ex) int, short 이면 int로 변환
package week02;
public class W09 {
public static void main(String[] args) {
short x = 10;
int y = 20;
int z = x + y; // x는 short, y는 int 이므로 더 큰 타입인 int 를 따른다.
long lx = 30L;
long lz = z + lx; // z는 int, lx는 long 이므로 long 타입이 된다.
float fx = x;
float fy = y;
float fz = z;
System.out.println(lz); //60
System.out.println(fx); //10.0
System.out.println(fy); //20.0
System.out.println(fz); //30.0
}
}
- 비트 연산
- 8bit = 1byte
- bit는 0,1 둘 중 하나의 값만을 저장, 컴퓨터의 가장 작은 단위
- 비트 연산 : bit의 자릿수를 옮기는 것
- '<<' : 왼쪽으로 자리수 옮기기, '>>' (오른쪽으로 자릿수옮기기)
- 0,1은 2진수 값이므로,
- 왼쪽으로 옮기는 횟수만큼 2배로 곱하여 계산됨 ex) 0101(5) -> 1010(10)
- 오른쪽으로 옮기는 횟수만큼 2배로 나눠짐 ex) 1010(10) -> 0101(5)
package week02;
public class W10 {
public static void main(String[] args) {
// (2) 표기는 이 숫자가 이진수값이라는 표식 입니다.
System.out.println(3 << 2); //12
// 3의 이진수값인 11(2) 에서 왼쪽으로 '2'번 옮겨져서 1100(2)인 12값이 됩니다.
System.out.println(3 >> 1); //1
// 3의 이진수값인 11(2) 에서 오른쪽으로 '1'번 옮겨져서 1(2) 인 1 값이 됩니다.
}
}