quilt code
[Java] 연산자 본문
1. 연산자
연산에 사용되는 표시나 기호: 연산자
연산자와 함께 연산되는 데이터: 피연산자
연산자와 피연산자를 이용하여 연산의 과정을 기술한 것: 연산식
*연산자의 종류
| 산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
| 부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
| 문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
| 대입 | =, +=, -=, *=, /=, %= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
| 증감 | ++, -- | 단항 | 숫자 | 1만큼 증가/감소 |
| 비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값의 비교 |
| 논리 | !, &, |, &&, || | 단항 이항 |
boolean | 논리 부정, 논리곱, 논리합 |
| 조건 | (조건식) ? A : B | 삼항 | 다양 | 조건식에 따라 A 또는 B 중 하나를 선택 |
- 자바에서 사용하는 연산식은 하나만 도출
- 산술 연산자는 숫자 타입으로 결과값이 나옴(byte, short, int, float, double)
- 비교연산자와 논리 연산자는 논리 타입으로 결과값이 나옴(boolean)
*연산자의 연산방향과 우선순위
- 증감(++,--), 부호(+,-), 논리(!) ←
- 산술(*, /, %) →
- 산술(+, -) →
- 비교(<, >, <=, >=, instanceof) →
- 비교(==, !=) →
- 논리(&) →
- 논리(^) →
- 논리(|) →
- 논리(&&) →
- 논리(||) →
- 조건(?:) →
- 대입(=, +=,-=,*=,/=,%=) ←
p.107
1. ③ 연산식은 하나의 값만 산출
2. ④ 산술연산이 우선 수행됨
2. 연산자의 종류
- 단항 연산자: ++x;
- 이항 연산자: x + y;
- 삼항 연산자: (sum > 90) ? "A" : "B";
1) 단항 연산자
(1) 부호 연산자: 양수 및 음수를 표시하는 +. -, boolean타입과 char타입 제외한 나머지 기본타입에 사용
| + | 피연산자 | 피연산자의 부호 유지 |
| - | 피연산자 | 피연산자의 부호 변경 |

자바에서 기본 연산은 int처리 (정수의 경우, 실수의 경우엔 double 처리)

(2) 증감 연산자: 변수의 값을 1증가(++) 혹은 1감소(--)시키는 연산자, boolean 타입 제외 모든 기본 타입에 사용
int x = 1;
int y = 1;
int result1 = ++x + 10;
연산 하기 전에 x의 값을 1 증가 시키고 연산해라 => 1 + 1 + 10 = 12
int reslult2 = y++ + 10;
연산 한 후에 y의 값을 1 증가 시켜라 => 1 + 10 = 11, y = 2

int x = 10;
int y = 10;
int z;
|
x++;
++x; System.out.println("x=" + x); |
x=12 | x++: x값을 불러 온 후 10 에 1 증가 11 ++x: 불러온 x값 11 에 1증가 12 |
|
y--;
--y; System.out.println("y=" + y); |
y=8 | y--: y값 불러 온 후 10 에 1 감소 9 --y: 불러온 y값 9에 1 감소 8 |
|
z = x++;
System.out.println("z=" + z); System.out.println("x=" + x); |
z=12 x=13 |
z=x++; : x값 불러온 후 12 1 증가 13 -> x=13 다음 줄부터 적용됨 |
|
z = ++x;
System.out.println("z=" + z); System.out.println("x=" + x); |
z=14 x=14 |
z=++x: x값 13에 1 증가한 후 값 불러옴 14 |
|
z = ++x + y++;
System.out.println("z=" + z); System.out.println("x=" + x); System.out.println("y=" + y); |
z=23 x=15 y=9 |
z=++x : x값 14에 1 증가한 후 값 불러옴 15 + y++ : y값을 불러온 후 8 1증가 9 |

int result = 0;
result += 10;
result +=1;
result +=1;
=1 생략
**1만
| 연산공간 | 저장 공간 (영역)-메모리 |
| int result = 0; result += 1; result ++; (=result+1;) -> 숫자 값을 꺼내온 다음에 1 증가 ++result; -> 값을 꺼내기 전에 1증가(1증가시킨 다음에 값을 꺼냄) |
->명령 실행 위치랑 저장 공간이 다름 |
(3) 논리 부정 연산자: !로 true는 false로 false는 true 값 산출, boolean타입에만 사용

! true = false
! false = true
| 1. play = true | play를 출력하라고 했으니까 true |
| 2. 1의 결과 play=true 논리 부정(!) | false |
| 3. 2의 결과 play=false 논리 부정(!) | true |

2) 이항 연산자
(1) 산술 연산자: 사칙연산자인 +, -, *, /과 나머지를 구하는 % (boolean타입 제외 나머지 기본 타입에 사용)
*% : 왼쪽 피연산자를 오른쪽 피연산자로 나눈 나머지를 구하는 연산
ex) 46%5 => 1, 7%45=>7 (오른쪽 피연산자가 더 크면 왼쪽 피연산자 출력), 9%1=>0
산술연산자 예)


- 피연산자들이 byte, short, char 타입일 경우 모두 int 타입으로 변환 후에 연산
- 피연산자들이 모두 정수타입이고 long 타입이 포함되어 있을 경우 모두 long 타입으로 변환 후에 연산
- 피연산자 중 실수 타입 float, double이 있을 경우, 허용범위가 큰 실수 타입으로 변환된 후 수행
char 타입의 산술연산 예)

char c1 = 'A' + 1; => char c1=66;으로 컴파일됨
('A':65라는 유니코드를 가지므로 'A'+1은 66이 됨)
char c3 = c2 + 1; => c2는 int 타입으로 변환, 1과 연산이 되기 때문에 연산 결과는 int 타입이 됨
=> char 타입인 c3에 저장하게 되면 컴파일 에러 발생
=> char c3 = (char) (c2 + 1);

문자열 결합 연산자 예)

어느게 먼저 연산되느냐에 따라 결과값이 달라짐

(2) 비교 연산자
| 동등 비교 | x == y | x,y의 값이 같은지 검사 |
| x != y | 값이 다른지 검사 | |
| 크기 비교 | x > y | x가 큰지 검사 |
| x >= y | x가 크거나 같은지 검사 | |
| x < y | y가 큰지 검사 | |
| x <= y | y가 크거나 같은지 검사 |

*피연산자가 char 타입이면 유니코드 값으로 비교 연산


이거 왜..?
int랑 double이랑 비교 가능...? 안된다면서...?
>> double은 정수를 정확하게 나타낼 수 있습니다. (https://stackoverflow.com/questions/7453505/why-a-double-1-0-its-equal-to-an-int-1)
double이랑 float은 불가 하지만 (float)추가해서 변환해주고 비교 or 정수타입으로 변환해서 비교

(3) 논리 연산자 &&, ||, &, |, ^, ! : boolean타입만 사용 가능
| &&(논리곱, AND) | true &&(&) true : t t &&(&) false : f f &&(&) t : f f &&(&) f :f |
피연산자가 모두 true일 경우에만 연산 결과가 true |
| ||(논리합, OR) | t ||(|) t : t t ||(|) f : t f ||(|) t : t f ||(|) f : f |
피연산자 중 하나만 true이면 연산 결과는 true |
| ^(배타적 논리합, XOR) | t ^ t : f t ^ f : t f ^ t : t f ^ f : f |
피연산자 중 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true |
| !(논리 부정, NOT) | !t: f !f:t |
피연산자의 논리값을 바꿈 |
* & Ampersand : 그리고 : 둘다 참이어야 참이 나옴
* | : 또는 : 둘중 하나가 참이면 참이 나옴
* &,|: 비트연산자 : 거짓이 나와도 뒤 연산함
* &&,||: 논리연산자 : 앞이 거짓이 나오면 뒤가 참이든 거짓이든 앞 결과로 나옴, 뒤는 연산하지 않음
보통은 두개짜리 많이 사용->조금 더 효율적이기 때문
* ^ 두개의 논리가 같으면 false 다르면 true
* ! not


(4) 대입 연산자
: 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장. 오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있음
| int x = 10; |
| x = x + 5; |
| x = x + 6; |
① int x = 10의 값을 메모리에 있는 x값에 대입
② 메모리에 있는 x 값을 가져와서 대입 x=15;
③ 다시 메모리 x값 가져감 15
④ 메모리에 있는 x값 가져와서 대입 x=16;
⑤ 결과: 21
x = x + 10;
x값 중복이라 삭제
x = + 10;
-> x += 10; 자리를 나타내기 위해 +를 앞으로 꺼냄
| int x = 10; | |
| x = x + 10; | x += 10; |
| x = x - 10; | x -= 10; |

result = result + 10;
result = result - 5;
result = result * 3;
result = result / 5;
result = result % 3;

3) 삼항 연산자
: 3개의 피연산자를 필요로 하는 연산자
? 앞의 조건식에 따라 콜론 (:) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식이라고도 함
연산 결과를 대입하기 위해 사용
데이터를 결정해줌....
| 조건식 (피연산자) |
? | 값 또는 연산식 (피연산자2) |
: | 값 또는 연산식 (피연산자3) |
| true | ||||
| false | ||||
조건식을 연산하여 true가 나오면 삼항 연산자의 결과는 피연산자2가 됨
조건식을 연산하여 false가 나오면 삼항 연산자의 결과는 피연산자3이 됨


Scanner추가예)


[과제]
4.


6.

value의 값을 3.56로 만들고 value/100 -> int로 3이 됨
->다시 *100
1. 나머지를 활용
value - value %1002. 연산자 활용value / 100*100
8.


9.

scanner부터 만들기
double result = num1 / num2
sysout ("결과: " + result)
조건에 따라서 값을 다르게 할당
0 입력시 무한대로 출력 -> double 타입을 바꿔줌
삼항 연산자 사용
String result = (num1 == 0 || num2 == 0.0 ? "무한대" + num1 / num2 +
String result = (num1 == 0 || num2 == 0.0 ? "무한대" : String.valueOf(num1 / num2);
10.

var2 + "." + var3 -> 문자열 -> 숫자로 바꾸려면 Double.parseDouble

11. ★★★

"10".equals("20")
문자열은 ==으로 비교
if (condition)
condition 조건에 따라서 참이면 if 출력 거짓이면 else 출력같다 다르다 표현할때 ==문자열의 같다 다르다 표현할때 == 쓰면 안됨기본타입의 경우는 데이터 비교가 가능한데기본타입이 아닌 나머지의 경우에는 값 비교가 아니라 값이 저장된 주소값을 비교문자열 비교 : equals 메소드 사용 -> "java".equals(name)
숫자는 ==

'daily > Java' 카테고리의 다른 글
| [Java] 연산자 예제 (0) | 2022.12.26 |
|---|---|
| [Java] 조건문과 반복문 (0) | 2022.12.26 |
| [Java] 변수와 시스템 입출력 (0) | 2022.12.22 |
| [Java] 타입 변환 (0) | 2022.12.21 |
| [Java] 타입 (0) | 2022.12.21 |