
"안녕, 빌라보!"
"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가 참이 아니면 참입니다. 즉, b가 false 이면 결과는 true 입니다 . |
int a = 2, b = 3, c = 4;
|
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; |
= *=, /=, %= -=, += <<=. >>=, >>>= &=, ^=. |= |
|
가장 낮은 우선 순위(마지막으로 수행됨) |
GO TO FULL VERSION