2-3 대입연산자
package week02;
public class W05 {
public static void main(String[] args) {
// 대입연산자
// 변수를 바로 연산해서 그 자리에서 저장하는(대입하는) 연산자
// =(기본연산자), +=, -=, *= ....(복합대입연산자)
// ++ : += 1
// -- : -+ 1
// 기본 대입 연산자
int number = 10;
number = number + 2;
System.out.println(number); // 12
number = number - 2;
System.out.println(number); // 10
number = number * 2;
System.out.println(number); // 20
number = number / 2;
System.out.println(number); // 10
number = number % 2;
System.out.println(number); // 0
System.out.println("----------");
// 복합 대입 연산자
number = 10;
number += 2; // number = number + 2;
System.out.println(number); // 12
number -= 2; //number = number - 2;
System.out.println(number); // 10
number *= 2; // number = number * 2;
System.out.println(number); // 20
number /= 2; // number = number / 2;
System.out.println(number); // 10
number %= 2; // number = number % 2;
System.out.println(number); // 0
// ++, --
// number = numbert + 1;
// number += 1;
number++;
System.out.println(number); // 1
number--;
System.out.println(number); // 0
}
}
package week02;
public class W06 {
public static void main(String[] args) {
// 대입연산자에서 주의해야 할 점 !!
// ++, --
int a = 10;
int b = 10;
int val = ++a + b--; // 21. ++a 는 a 앞에 ++가 붙어 +1처리가 된 후 다음 연산자 + 로 넘어갔지만
// b--에서는 ++a(11) + b 의 연산(+)이 !끝난 후! b값에 -1을 처리했기 때문에 21.
// int val = ++a + --b; // 20. b앞에 --가 들어가 9인 상태로 연산(+)이 진행되었기 때문에 11 + 9 = 20
System.out.println(a); // 11
System.out.println(b); // 9
System.out.println(val);
}
}
2-4 기타연산자
package week02;
public class W07 {
public static void main(String[] args) {
// 기타 연산자
// (1) 형변환 연산자
int intNumber = 93 + (int)98.8; // 93 + 98
System.out.println(intNumber); // 191
double doubleNumber = (double)93 + 98.8; // 93.0 + 98.8
System.out.println(doubleNumber); // 191.8
// (2) 삼항연산자
// 비교연산자와 항상 함께 쓰인다.
// 비교연산자의 결과 : true or false -> 이 결과의 값에 따라 결정되는 무언가!
// 조건 ? 참 : 거짓
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false; // false
System.out.println(b); // false
// x가 y랑 다르니? 응!
String s = (x != y) ? "정답" : "오답";
System.out.println(s); // 정답
int max = (x > y) ? x : y; // 1 > 9가 맞음? 아니!->y
System.out.println(max); // 9. y=9 이기 떄문.
int min = (x < y) ? x : y; // 1 < 9가 맞음? 응! ->x
System.out.println(min); // 1. x=1 이기 때문.
// (3) instance of (3주차 -> 클래스, 객체)
// 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여
// 맞으면 -> true
// 틀리면 -> false
}
}
2-5
[ 연산자 우선순위 : 산술 > 비교 > 논리 > 대입 ]
- 연산자 여러개가 함께 있는 연산을 계산할때는 우선순위가 있다.
- 위 우선순위에 따라서 최종적인 응답값이 결정된다.
- 단, 괄호로 감싸주면 괄호안의 연산이 최우선순위로 계산!
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; true && true
System.out.println(result); // true
System.out.println("-----");
result = x + 10 < y && y < z; // 12 < 9 && 9 < 10
System.out.println(result); // false
System.out.println("-----");
result = x + 2 * 3 > y; // 2 + 6 > 9
System.out.println(result); // false
result = (x + 2) * 3 > y; // 4 * 3 > 9
System.out.println(result); // true
}
}
error : true && true -> // true && true
연산 전에 두 피연산자의 타입이 다른 경우 타입을 일치시킨다.
- 두 피연산자의 타입을 같게 일치시킨다. (둘중에 저장공간 크기가 더 큰 타입으로 일치)
- 피연산자의 타입이 'int' 보다 작은 'short' 타입이며면 'int'로 변환
- 피연산자의 타입이 'long' 보다 작은 'int', 'short' 타입이면 'long' 으로 변환
- 피연산자의 타입이 'float'보다 작은 'long', 'int', 'short' 타입이면 'float'으로 변환 (float은 부동소수점이라 long보다 표현범위 큼)
- 피연산자의 타입이 'double' 보다 작은 'float', 'long', 'int', 'short' 타입이면 'double'으로 변환
- 이처럼, 변수 여러개를 연산했을 때 결과값은 피연산자 중 표현 범위가 가장 큰 변수 타입을 가지게 된다.
package week02;
public class W09 {
public static void main(String[] args) {
short x = 10;
int y = 20;
int z = x + y; // short인 x보다 int인 y가 더 큰 타입임으로 int z
long lx = 30L; // long은 항상 접미사 L을 붙여준다.
long lz = z + lx; // int z보다 long lx가 더 큰 타입임으로 long lz
float fx = x;
float fy = y;
float fz = z; // x,y,z의 타입이 short, int, int로 float보다 작은 타입이라 float에 속할 수 있음.
System.out.println(lz); // 60
System.out.println(fx); // 10.0
System.out.println(fy); // 20.0
System.out.println(fz); // 30.0
}
}
- 비트 연산
- Byte 를 8등분한게 Bit
- Bit는 0, 1 둘중의 하나의 값만을 저장하는 컴퓨터가 저장(표현)가능한 가장 작은 단위
- 컴퓨터의 가장 작은 단위인 Bit 이기 때문에 연산중에서 Bit 연산이 가장 빠름
- 물론 이전에 배운대로 0, 1 값으로 산술연산을 하거나, 비교연산을 할 수 있지만 비트 연산을 통해 자리수를 옮길수도 있음
- '<<' (왼쪽으로 자리수 옮기기), '>>' (오른쪽으로 자리수 옮기기)
- 0,1 은 2진수 값이기 때문에,
자리수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일
자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일
ex ) 0101 -> 1010 1010 -> 0101
5 10 10 5
package week02;
public class W10 {
public static void main(String[] args) {
System.out.println(3 << 2); // 12
System.out.println(3 << 1); // 6
}
}

위와 같은 원리로 >> 해서 자릿수를 오른쪽으로 옮기면
package week02;
public class W10 {
public static void main(String[] args) {
System.out.println(3 >> 2); // 0
System.out.println(3 >> 1); // 1
}
}
11 -> 00 = 0
11 -> 01 = 1
'Backend > Java' 카테고리의 다른 글
| Java 문법 2주차 2-9,10 while, break, continue, 반복문 활용 (1) | 2023.11.21 |
|---|---|
| Java 문법 2주차 2-6,7,8 if, switch, for (조건문, 반복문) (1) | 2023.11.21 |
| Java 문법 2주차 2-1,2 사칙연산~논리연산자 (0) | 2023.11.21 |
| Java 1주차 문법 1-7,8,9 아스키코드, 변수타입(심화), 형변환 (0) | 2023.11.21 |
| Java 문법 1주차 1-5,6 변수 (1) | 2023.11.21 |