일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Dependency
- 자료형
- 자바set
- Python
- Hilt
- 파이썬문법
- Provider
- 배열
- disposableeffect
- ContentProvider
- 프로그래머스
- 자바
- 오블완
- 백준파이썬
- android
- list
- programmers
- composelifecycle
- 티스토리챌린지
- 문자열
- 자바리스트정렬
- Kotlin
- 파이썬
- Java
- nullpointerexception방지
- filternotnull()
- compose
- 리스트
- 백준
- jetpack
- Today
- Total
study gomi
Java Day8 연산자 본문
연산자
- 상수나 변수 값을 조작 할 수 있도록 해주는 것이 연산이다.
- 어떠한 연산을 할 것인지를 기호로 사용하는 것이 연산자.
- 일반적인 산수에서 사용하는 4칙 연산 외에 프로그래밍에서 특별하게 사용하는 연산자도 있다.
- 연산자 우선 순위가 있다.
최우선 연산자
- . : 메모리에 생성된 객체의 멤버에 접근 / 특정 매개체의 하위에 접근할 때 사용
- [ ] : 배열에서 요소에 접근하고자 할 때 사용
- ( ) : 수식에서 연산의 우선 순위를 조정하고자 할 때 사용
int a1 = 1 + 2 * 3;
System.out.println(" 1 + 2 * 3 = " + a1);
int a2 = (1 + 2) * 3;
System.out.println("(1 + 2) * 3 = " + a2);
단항 연산자
- ! : true를 false로 false를 true로
- ~ : 숫자의 비트를 0은 1로, 1은 0으로
- +, - : 숫자의 부호를 결정
- ++, -- : 값을 1 증가시키거나 감소 시키는 연산자 (전위형)
- (cast) : 값의 타입을 변경할 때 사용
boolean bool3 = true;
System.out.println("bool3 : " + bool3);
System.out.println("!bool3 : " + !bool3);
int i1 = 100;
// 숫자를 이진수로 변환 후 문자열 형태로 전달
System.out.printf("i1 : %32s\n", Integer.toBinaryString(i1));
System.out.printf("~i1 : %32s\n", Integer.toBinaryString(i1));
// 양수 값을 음수로 전환하는 방법
// 2의 보수의 방법: 100의 절대값을 2진수로 구하고 비트 다 뒤집고 +1
System.out.println(~i1); // 실행결과 : -101
System.out.println(~i1 + 1); // 실행결과 : 100
// 부호 연산자
System.out.println(+i1);
System.out.println(-i1);
// 증감 연산자
System.out.println("++i1 : " + ++i1);
System.out.println(i1);
System.out.println("--i1 : " + --i1);
System.out.println(i1);
// 캐스트
i1 = 214712458;
// short short3 = i1; // Error
short s1 = (short) i1;
long l1 = i1;
System.out.println(l1);
System.out.println(s1); // 엉뚱한 값 출력 됨.
산술 연산자
- +, -. *, / : 일반적인 4 칙 연산
- % : 나머지를 구하는 연산자
// 산술 연산자
System.out.println("100 + 200 = " + (100 + 200));
System.out.println("100 - 200 = " + (100 - 200));
System.out.println("100 * 200 = " + (100 * 200));
System.out.println("100 / 200 = " + (100 / 200));
System.out.println("100 % 200 = " + (100 % 200));
// 문자열 + 숫자형 혹은 숫자형 + 문자형
// 문자열과 숫자형이 만나면 뒤 숫자형이 문자열로 바뀜(문자열과 더하기 때문.)
System.out.println("100" + 200 + 300); //100200300이 출력
System.out.println(100 + 200 + "300"); // 300300이 출력
시프트 연산자
- << : 비트를 왼쪽으로 이동시켜주는 연산
- >> : 비트를 오른쪽으로 이동시켜주는 연산 (부호 유지)
- >>> : 비트를 오른쪽으로 이동시켜주는데 무조건 0으로 채워짐.
숫자 >> 1
0000 1000 -> 0000 0100
1000 1000 -> 1100 0100
1 << 숫자
0000 1000 -> 0001 0000
숫자 >>> 1
0000 1000 -> 0000 0100
1000 1000 -> 0100 0100
// 시프트 연산자
// 오른쪽 시프트는 나누기 2의 효과가 있다.
// 오른쪽 시프트 3번은 나누기 8(2 * 2 * 2)의 효과가 있다.
System.out.printf("%32s %d\n", Integer.toBinaryString(100), 100); // 정수 100을 이진수로 출력
System.out.printf("%32s %d\n", Integer.toBinaryString(100 >> 1), 100 >> 1);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 >> 2), 100 >> 2);
System.out.println();
// 우측 시프트는 곱하기 2의 효과가 있다.
System.out.printf("%32s %d\n", Integer.toBinaryString(200), 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(200 << 1), 200 << 1);
System.out.printf("%32s %d\n", Integer.toBinaryString(200 << 2), 200 << 2);
System.out.println();
System.out.printf("%32s %d\n", Integer.toBinaryString(-100), -100);
System.out.printf("%32s %d\n", Integer.toBinaryString(-100 >> 1), -100 >> 1);
// 암호화 모듈 등 특별한 상황에서 사용.
System.out.printf("%32s %d\n", Integer.toBinaryString(-100 >>> 1), -100 >>> 1);
관계 연산자
- > : 좌측의 값이 우측의 값보다 크면 true, 작거나 같으면 false
- < : 좌측의 값이 우측의 값보다 작으면 true, 크거나 같으면 false
- >= : 좌측의 값이 우측의 값보다 크거나 같으면 true, 작으면 false
- <= : 좌측의 값이 우측의 값보다 작거나 같으면 true, 크면 false
- == : 좌측의 값과 우측의 값이 같으면 true, 다르면 false
- != : 좌측의 값과 우측의 값이 다르면 true, 같으면 false
// 관계 연산자
System.out.println("100 > 10 : " + (100 > 10));
System.out.println("100 < 10 : " + (100 < 10));
System.out.println("100 >= 10 : " + (100 >= 10));
System.out.println("100 <= 10 : " + (100 <= 10));
System.out.println("100 != 10 : " + (100 != 10));
비트 연산자
- & : 두 수를 2진수로 변환한 후 각 자리를 비교하여 둘 다 1일 경우만 1이 되는 연산자
- | : 두 수를 2진수로 변환한 후 각 자리를 비교하여 둘 중에 하나라도 1이면 1이 되는 연산자
- ^ : 두 수를 2진수로 변환한 후 각 자리를 비교하여 두 비트가 같으면 0, 다르면 1이 되는 연산자
1000 1000 & 0000 1000 = 0000 1000
1000 1000 | 0000 1000 = 1000 1000
1000 1000 ^ 0000 1000 = 1000 0000
// 비트 연산자
System.out.printf("%32s %d\n", Integer.toBinaryString(100), 100);
System.out.printf("%32s %d\n", Integer.toBinaryString(200), 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 & 200), 100 & 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 | 200), 100 | 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 ^ 200), 100 ^ 200);
논리 연산자
- && : 연산자를 기준으로 좌측과 우측에 관계 연산자가 있을 경우 두 값이 모두 true이면 true, 하나라도 false이면 false를 반환.
- & : 기본적인 연산은 &&와 같지만 좌측 연산 결과 값이 false라고 하더라도 이 후의 연산을 모두 수행.
- || : 연산자를 기준으로 좌측과 우측에 관계 연산자가 있을 경우 두 값 중 하나라도 true면 true, 둘 다 false라면 false를 반환한다.
- | : 기본적인 연산은 ||와 같지만 좌측 연산 결과 값이 true라고 하더라도 이후의 연산을 모두 수행.
&&는 좌측의 연산 결과 값이 false라면 이후의 연산은 수행하지 않고 false를 반환.
|| 는 좌측의 연산 결과 값이 true라면 이후의 연산은 수행하지 않고 true를 반환.
// 논리 연산자
System.out.println(true && true);
System.out.println(true && false);
System.out.println(false && false);
System.out.println(false && true);
System.out.println(2 > 1 && 3 > 2);
System.out.println(2 > 1 && 3 < 1);
System.out.println(2 < 1 && 3 > 2);
System.out.println(2 < 1 && 3 < 2);
System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || true);
System.out.println(false || false);
int k1 = 100;
int k2 = 200;
System.out.println(++k1 > 100 && ++k2 > 200);
System.out.println(k1 + " " + k2);
k1 = 100;
k2 = 200;
// &&는 앞의 조건이 false면 뒤의 계산은 하지 않는다.
System.out.println(++k1 < 100 && ++k2 > 200);
System.out.println(k1 + " " + k2); // k2는 200
k1 = 100;
k2 = 200;
// &는 앞의 조건이 false라도 뒤의 계산까지 다 한다.
System.out.println(++k1 < 100 & ++k2 > 200);
System.out.println(k1 + " " + k2);
k1 = 100;
k2 = 200;
// ||는 앞이 참이면 뒤의 연산은 하지 않는다.
System.out.println(++k1 > 100 || ++k2 > 200);
System.out.println(k1 + " " + k2);
k1 = 100;
k2 = 200;
// |는 앞이 참이어도 뒤의 연산을 끝까지 한다.
System.out.println(++k1 > 100 | ++k2 > 200);
System.out.println(k1 + " " + k2);
삼항 연산자
- 조건항? 항1 : 항2
- 조건항의 결과 값이 true면 항1, false면 항2를 반환.
int k3 = 10 > 20 ? 100 : 200;
System.out.println(k3);
배정 대입 연산자
- =, +=, -=, *=, /= %=, <<=, >>=, ^=, &=, !=
// 배정대입연산자
k1 = 100;
k2 = 100;
System.out.println((k1 += 2) + " " + (k2 = k2 + 2));
System.out.println((k1 /= 2) + " " + (k2 = k2 / 2));
후위형 증감 연산자
- --, ++ : 자기 자신의 값을 하나 증가하거나 감소
- 기본적으로 전위형 증감 연산자와 같지만 전위형은 연산작업을 수행 후 값을 전달하지만, 후위형은 값을 전달한 후 연산을 수행한다.
// 후위형 증감연산자
k1 = 100;
k2 = ++k1;
System.out.println(k1 + " " + k2);
k1 = 100;
k2 = k1++;
System.out.println(k1 + " " + k2);
'basic > java' 카테고리의 다른 글
Java 출력하기 정리 (숫자-정수/실수, 문자열, 여러 가지 타입 - 포맷팅) (0) | 2024.05.23 |
---|---|
Java 사용자에게서 입력 받기 정리 (Scanner 클래스 사용) (0) | 2024.05.23 |
Java Day7 표준 입출력 (0) | 2024.02.23 |
Java Day6 변수와 자료형 (0) | 2024.02.23 |
Java Day5 상수 (1) | 2024.02.21 |