하드웨어적으로 보면 컴퓨터 중앙처리장치의 산술 논리 장치에 의한 논리연산을 수행하는 일련의 과정이다.
이것은 소프트웨어적으로는 프로세스의 의미가 된다.
이것의 확장된 의미로는 컴퓨터가 정보를 입력 받아 기억된 데이터를 운영 체제의 제어 하에 연산을 수행하고 결과값을 내보내는 출력의 흐름이다.
연산자
연산을 수행하는 기호피연산자
: 연산의 대상이항연산자
: 피연산자의 개수가 2개인 것 단항 연산자
: 개수 1 삼항 연산자
: 개수 3 사칙연산과 나머지(모듈)연산
+
-
*
/
%
System.out.println(4/2); // 2
System.out.println(4/2f); // 2.0 ((2f)실수라는 큰 타입으로 일치)
byte a + byte b
는 int a + int b
로 변환되어 결과가 int c
가 나온다 byte a = 3;
byte b = 4;
byte c = a + b; //컴파일에러. a+b의 결과는 int
byte a + byte b = (byte) c;
int a = 1\_000\_000; int b = 2\_000\_000; long c = a + b;
해주면 우리가 기대하는 값이 안나온다. 이미 연산결과가 int로 변환된 상태이기 때문. a, b중 먼저 long으로 변환해준 후 연산 해야 한다./
, %
연산자는 0으로 나눌수 없다. System.out.println(3%0.0); // 결과값 NaN System.out.println(3/0.0); // 결과값 Infinity
한 개 혹은 두개의 이진수에 대해 비트 단위로 적용되는 연산 출처 : 위키백과
NOT(~)
: 반대로 바꿔준다. 0을 1로. 1을 0으로.0R(|)
: 두 값의 각 자릿수 비교해서 하나라도 1이 있으면 1. 그 외는 0.XOR(^)
: 두 값의 각 자릿수 비교해서 같으면 0, 다르면1AND(&)
: 두 값의 각 자릿수 모두 1일 때만 1x | y | x|y | x&y | x^y |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
>>
또는 왼쪽 <<
으로 이동시켜 해당 숫자를 곱하고 나누는 결과를 만들어 내는 연산 x << n
: x를 n비트 만큼 좌(<<)로 이동하고 저장범위 벗어난 값은 버려지며 오른쪽 빈 값은 0으로 채워준다x >> n
: x를 n비트 만큼 우(>>)로 이동하라는 의미, 맨 앞의 수(빈자리)는 0 또는 1 (원래의 부호로)System.out.println( Integer.toBinaryString(8 >> 0));
//결과값 1000
System.out.println( Integer.toBinaryString(8 >> 2));
//결과값 10
x >>> n
: x를 n비트만큼 우(>>)로 하라는 의미에서 >>
과 같으나 최상위비트는 항상 0이다. (양수만) System.out.println( Integer.toBinaryString(-153 >> 2));
//결과값 11111111111111111111111111011001
System.out.println( Integer.toBinaryString(-153 >>> 2));
//결과값 111111111111111111111111011001
https://velog.io/@bongf/211103-Algorithms-TIL
https://programmers.co.kr/learn/courses/30/lessons/42890
비트형 표현은 부분집합 문제를 풀 때 용이하다 (위문제)
true
or false
<
>
<=
>=
==
!=
&&
: AND 두 피연산자 모두 true일 때 true||
: OR 두 피연산자 중 한 쪽이 true면 true&&
가 ||
보다 우선순위가 높다&&
과 ||
은 Short Circuit Evaluation이고 &
과 |
는 아니다&&
일 때 false &&
면 두 번째 피연산자 보지 않고 무조건 false
||
일 때 true ||
면 두 번째 피연산자 보지 않고 무조건 true
&
과 |
는 무조건 두 피연산자 다 확인A instance of B
: A값의 타입이 B로 형변환 할 수 있다면 true
instanceOf
가 참이라도 조상타입의 참조변수로 자식 객체를 참조할 수 있기 때문에 실제 타입은 다를 수 있다. x=y=1
이면 y=1
먼저)lvalue(leftvalue)
오른쪽피연산자를 rvalue(rightvalue)
라고 함 lvalue
에는 변수처럼 값을 변경할 수 있는 것만 가능, 리터럴이나 상수는 불가능(Parameters) -> { Body }
이런식으로 사용. 좌변이 함수에서 사용할 매개변수를 의미한다.()
생략가능(int a) ->
이런식으로 원래 파라미터 타입까지 작성하는데 람다식으로 해당 타입이 유추 가능한 경우 타입을 생략하고 써주기도 한다. -> {}
이 블럭도 뒤의 람다식이 한 문장일 때 {}
가 생략가능한데, return 구문이 있으면 생략 불가다. 하지만 보통 return까지 생략한다.조건식 ? 식1 : 식2
true
라면 식1 반환, false
라면 식2 반환.()
를 치기도 하고 생략하기도 한다.if문
으로 바꿔 쓸 수 있다.a < 0.5 ? 1 : 0.5
이라면 1과 0.5 중 1만 int이므로 1.0으로 산술변환된다.()
를 쳐주는 것이 좋다 종류 | 연산자 |
---|---|
후위표기식 | expr++ expr-- |
단항연산자 | ++expr --expr +expr -expr ~ ! |
곱셈, 나눗셈 | * / % |
덧셈, 뺄셈 | + - |
비트(시프트) | <<, >>, >>> |
관계비교 | <, >, <=, >=, instanceof |
동등비교 | ==, != |
비트 AND | & |
비트 XOR | ^ |
비트 OR | | |
논리 AND | && |
논리 OR | | | |
삼항연산자 | ?: |
대입연산자 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= |
switch (조건식) {
case 값1:
.. break;
case 값2:
... break;
...
default:
}
if x = a; if x = b;
case a; case b;
case a -> {}
case 1, 2:
break
대신에 yield
로 case문 안에서 return이 가능하다case a -> {
yield 8;
}
2) 비트 연산자
3) 관계연산자
- https://github.com/study-whiteship/study-whiteship/tree/master/week3/august
5) instanceOf https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
9) 연산자 우선순위
10) SWITCH
https://blog.baesangwoo.dev/posts/java-livestudy-3week/
https://catch-me-java.tistory.com/31
https://docs.oracle.com/en/java/javase/13/language/switch-expressions.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html