연산자 우선 순위 - 1

"안녕, 빌라보!"

"Bilaabo는 그의 친구를 맞이하게되어 기쁩니다!"

"오늘 Bilaabo는 연산자 우선 순위에 대해 알려줄 것입니다. 그러나 먼저 그는 연산자 자체에 대해 알려줄 것입니다."

"당신이 말하는 이 연산자는 무엇입니까?"

"사실, 당신은 이미 그것들에 익숙합니다. 당신은 그것들이 연산자라고 불리는 것을 몰랐을 수도 있습니다."

"예를 들어 c = a + b 라는 표현이 있다고 합시다  . "

"덧셈 연산자와 대입 연산자라는 두 개의 연산자가 있습니다."

"즉, 연산자는 수학 기호일 뿐이라고요? 곱셈, 나눗셈, 덧셈 같은 거죠?"

"네, 맞습니다. 하지만 차이점이 있습니다."

"나는 당신을 위해 연산자를 정의하지 않을 것입니다. 정의는 당신을 더 똑똑하게 만들지 않을 것입니다. 연산자를 실제로 보는 것이 좋습니다. 연산자는 여러 그룹으로 나눌 수 있으며 지금 살펴보겠습니다."

1) " 수학 연산자 "

상징 이름 설명(기능)
+ a + b 더하기 연산자 더하기 연산자.
- c - d 빼기 연산자 첫 번째 숫자에서 두 번째 숫자를 뺍니다.
* a * t 곱셈 연산자 두 숫자를 곱합니다.
/ a / b 나눗셈 연산자 첫 번째 숫자를 두 번째 숫자로 나눕니다.
% c % d 첫 번째 숫자를 두 번째 숫자로 나눕니다. 첫 번째 숫자를 두 번째 숫자로 나눈 후 나머지를 계산합니다.
- -a 단항 빼기 변수의 부호를 반대로 변경합니다.
더하기에서 빼기, 빼기에서 더하기.
+ +a 단항 더하기 아무것도 변경하지 않습니다. 이것은 단항 빼기 연산자를 보완하기 위해 추가되었습니다. 그것은 단지 외모를 위한 것입니다.

"나는 학교에서 이것들을 인식합니다. 내 펌웨어에는 학교 과정이 포함되어 있습니다."

"그런데 저 퍼센트 기호는 뭐야, 일종의 마법 같은 거야?"

"그것은 " 나누기 후 나머지 " 연산자입니다. 11을 5로 나누면 2가 되고 나머지는 1이 됩니다. 이 1은 11 % 5를 작성하여 얻을 수 있습니다."

"Java에서 정수를 나누면 결과도 정수입니다. 나누기 연산의 나머지는 단순히 무시됩니다. 8을 5로 나누면 1이 됩니다."

표현 결과
19 / 10 1 19를 10으로 나누면 결과는 1이고 나머지는 9입니다.
19 % 10 9 19를 10으로 나누면 결과는 1이고 나머지는 9 입니다 .
2 / 5 0 2를 5로 나누면  결과는 0이고 나머지는 2입니다.
16 % 2 0 16을 2로 나누면 결과는 8이고 나머지는 0 입니다 .

"하지만 나머지는 도대체 무엇을 위해 필요한 거죠?"

"정수가 짝수인지 확인해야 한다고 가정하면 다음과 같이 작성할 수 있습니다."

if (a % 2 == 0)

"그리고 b가 홀수인지 확인해야 하는 경우 다음과 같이 작성할 수 있습니다."

if (b % 2 == 1)

"또는 d가 3으로 나누어 떨어지는지 확인하려면:"

if (d % 3 == 0)

"흥미롭군. 기억할게."

2)  " 비교 연산자 "

상징 이름 설명(기능)
< a < b 미만 a가 b보다 작은지 확인합니다.
<= c <= d 보다 작거나 같음 c가 d보다 작거나 같은지 확인합니다.
> a > b 보다 큰 a가 b보다 큰지 확인합니다.
>= c >= d 보다 크거나 같음 c가 d보다 크거나 같은지 확인합니다.
== i == j 같음 i가 j와 같은지 확인합니다.
!= a != 0 같지 않음 a가 0이 아닌지 확인합니다.

"이미 다 사용하고 있습니다."

"그러면 이 연산자와 수학 연산자의 주요 차이점은 무엇입니까?"

"두 개의 숫자를 더하면 숫자가 되고 두 숫자를 비교하면 참 또는 거짓이 됩니다."

"그렇습니다. 비교 결과는 " 논리적 값 " 값이며, 아시다시피 부울 유형으로 표시됩니다. 두 가지 가능성이 있습니다: 참 또는 거짓.

"그래, 그건 다 알겠어. 이미 알고 있어."

3) " 논리 연산자 "

상징 이름 설명(기능)
&& a && b 그리고 식의 결과는 a와 b가 모두 참일 때만 참입니다.
|| c || d 또는 a 또는 b가 참이면 식의 결과가 참입니다. 둘 다 또는 적어도 하나.
! !a 아니다 표현식의 결과는 a가 거짓인 경우에만 참입니다.

"논리 연산자는 부울 변수 또는 식에만 사용할 수 있습니다."

설명
boolean a = true;
boolean b = true;if (a && b)
두 값이 모두 참이면 if 조건이 참입니다
. 즉, a와 b가 모두 참이면 결과는 입니다 .
boolean a = true;
boolean b = false;if (a || b)
if 조건은 적어도 하나의 값이 참이면 참입니다
. 즉, a 또는 b 중 하나가 참이면 결과는 입니다 .
boolean b = false;

if (!b)

if 조건은 b가 참이 아니면 참입니다.
즉,   b가 false 이면 결과는  true 입니다 .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

a가 b보다 작고 a가 c보다 작으면 식의 결과는 참입니다.
a, b, c는 정수이지만 정수를 비교한 결과는 논리값(true, false)이므로 논리 연산자를 사용할 수 있습니다.

"이미 다 알고 있어."

"그래? 그럼 계속하자."

4) " 비트 연산자 "

상징 이름 설명(기능)
& a & b 그리고 비트 AND
| c | d 또는 비트 OR
~ ~a 아니다 비트별 NOT
^ a ^ b XOR 비트 "배타적 OR"

" 비트 연산자는 정수에 대해 비트 단위 연산을 수행합니다."

"그게 뭐야?"

"각 숫자는 비트 집합으로 표현되며 결과는 다음과 같이 계산됩니다."

"두 숫자의 첫 번째 비트가 1이면 결과의 첫 번째 비트는 1이 됩니다."

"두 숫자의 두 번째 비트가 1이면 결과의 두 번째 비트는 1이 됩니다. 등등."

"모든 비트 연산자에 대해 사실인가요?"

"그것보다 훨씬 간단합니다. 비트는 0과 1, 두 개의 값만 가질 수 있죠?"

"오른쪽."

"그런 다음 1을 참으로, 0을 거짓으로 생각하십시오. 개별 비트에 대한 연산은 논리 연산과 거의 동일합니다."

논리식 비트 식
참 && 참 == 참 1&1 == 1
참 && 거짓 == 거짓 1&0 == 0
참 || 참 == 참 1|1 == 1
참 || 거짓 == 참 1|0 == 1
거짓 || 거짓 = 거짓 0|0 == 0
!거짓 == 참 ~0 == 1
!참 == 거짓 ~1 == 0

"오! 너무 쉽네요."

"예, 비트 연산은 두 숫자의 해당 비트를 사용한다는 점을 잊지 마세요."

"예, 기억합니다. 한 숫자의 첫 번째 비트는 두 번째의 첫 번째 비트와 쌍을 이루고 결과도 첫 번째 비트에 기록됩니다. 나머지 비트도 마찬가지입니다."

"그렇습니다. 다른 질문이 있습니까?"

"XOR과 'exclusive or'는 무엇입니까?"

"이것은 식은 죽 먹기입니다. 값이 다르면 참이고 같으면 거짓입니다."

논리식 비트 식
참 XOR 참 == 거짓 1 ^ 1 == 0
거짓 XOR 거짓 == 거짓 0 ^ 0 == 0
참 XOR 거짓 == 참 1 ^ 0 == 1
거짓 XOR 참 == 참 0 ^ 1 == 1

다음은 비트 연산의 몇 가지 예입니다.

비트로서의 숫자 비트로 결과 결과
5 & 3 0000010 1  & 0000001 1 0000000 1 1
7 & 2 000001 1 1 & 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

"고마워요, Bilaabo. 이제 알겠어요."

"비트 연산자 그룹이 하나 더 있습니다. 바로 시프트 연산자입니다."

5) " 시프트 연산자 "

상징 이름 설명(기능)
>> a >> b 오른쪽 시프트 숫자 a의 비트를 b자리만큼 오른쪽으로 이동합니다.
<< c << d 왼쪽 시프트 숫자 c의 비트를 d자리만큼 왼쪽으로 이동합니다.
>>> a >>> 2 부호 없는 오른쪽 시프트 숫자 a의 비트를 오른쪽으로 2자리 이동합니다.

"이게 무슨 스트리트 매직이야?"

"실제로 정말 간단합니다. 확인해보세요."

비트로서의 숫자 비트로 결과 결과
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00101000 _ _ 40

"숫자의 비트를 왼쪽으로 1씩 이동하는 것은 숫자에 2를 곱하는 것과 같습니다. 두 자리 이동은 4, 세 자리, 8을 곱하는 것과 같습니다."

"오른쪽으로 이동하는 것은 2, 4, 8, 16 등으로 나누는 것과 같습니다."

"하지만 >>>와 >> 연산자의 차이점은 무엇입니까?"

"그들은 음수로 작업할 때 다릅니다. 이것은  부호 있는 숫자가 부호를 나타내기 위해 가장 왼쪽 비트를 사용하기 때문입니다 . 확인 해봐:"

표현 결과 설명
1 000 1010 >> 1 11 000 101 음수는 음수로 유지됩니다.
음수의 경우 들어오는 비트는 1로 채워집니다.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 음수는 더 이상 음수가 아닙니다. 음수의 경우 들어오는 비트는 0으로 채워집니다.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"이동은 주기적이지 않습니다. 숫자의 왼쪽 또는 오른쪽 가장자리를 넘어 이동하는 비트는 단순히 폐기됩니다."

6) " 할당 연산자 "

"과제가 뭔지는 이미 알고 있습니다. 그런데 왜 '오퍼레이터'라고 합니까?"

"여러 개가 있기 때문에 ☺"

운영자 의미
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

"나는 당신이 논리를 이해했다고 생각합니다."

7) " 증가 및 감소 연산자 "

표기법 설명
++ a++;
++b;
숫자를 1씩 증가시킵니다.
-- d--;
--i;
숫자 또는 변수를 1씩 감소시킵니다.

"두 개의 빼기 기호를 변수 앞이나 뒤에 두는 것 사이에 차이가 있습니까?"

"예, 아주 크지는 않지만 있습니다. 이러한 연산자 중 하나가 포함된 변수가 식 또는 대입의 일부인 경우 차이점이 있습니다. 예를 들어 보여드리겠습니다."

실제로 일어나는 일 설명
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a는 먼저 1씩 증가한 다음 표현식에 사용됩니다.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a는 식에서 먼저 사용된 다음 1씩 증가합니다.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
함수는 3을 반환하지만 a의 값은 1씩 증가합니다.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
여기서 결과는 13입니다. 먼저 x가 1씩 증가하고 이 값이 첫 항을 대체한 다음 x가 다시 1씩 증가합니다.

"우와! 멋지다!"

"마음에 드셨다니 다행입니다. 하지만 표현이나 할당이 없다면 차이가 없습니다."

"x++는 x = x + 1과 같습니다."

"++x는 x = x + 1과 같습니다."

"명심하겠습니다. 감사합니다, Bilaabo."

8)  " 삼항 연산자 "

"이 연산자는 하나 또는 두 개의 변수 또는 표현식을 사용하는 것이 아닙니다. 한 번에 세 개의 변수 또는 표현식을 사용합니다."

표기법 동등한 코드:
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

"글쎄요, 정말 편리합니다."

"예. 그리고 컴팩트하고 코드를 읽을 수 있습니다. 즐겁게 사용하세요!"

9) " 기타 "

"음악 컬렉션이 아무리 잘 정리되어 있어도 "기타" 폴더를 만들어야 합니다."

"예, 음악을 분류해야 했던 사람이라면 누구나 전적으로 동의할 것입니다."

"그래서 말씀드리고 싶은 연산자가 세 개 더 있습니다."

표기법 설명
() (a + b) * c 괄호는 연산자 우선 순위를 높입니다.
괄호 안에 있는 것이 먼저 실행됩니다.
[] c [i] = c [i + 1]; 인덱스로 배열 요소를 가져옵니다.
. int n = a.length; " 도트 연산자 "는 개체의 변수 및 메서드에 액세스합니다.

"마지막으로 연산자 우선 순위를 요약한 표가 있습니다."

연산자
가장 높은 우선 순위(연산자는 이 표의 순서에 따라 실행됨)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
가장 낮은 우선 순위(마지막으로 수행됨)