Keutamaan pengendali - 1

"Hai, Bilaabo!"

"Bilaabo gembira untuk menyambut rakannya!"

"Hari ini Bilaabo akan memberitahu anda tentang keutamaan pengendali. Tetapi mula-mula dia akan memberitahu anda tentang pengendali itu sendiri."

"Apakah pengendali yang anda perkatakan ini?"

"Sebenarnya, anda sudah biasa dengan mereka. Anda mungkin tidak tahu mereka dipanggil pengendali."

"Sebagai contoh, katakan kita mempunyai ungkapan  c = a + b; "

"Ia mempunyai dua pengendali: pengendali tambahan dan pengendali tugasan."

"Dalam erti kata lain, operator hanyalah tanda matematik? Seperti pendaraban, pembahagian dan penambahan?"

"Ya, itu benar. Namun, terdapat perbezaan."

"Saya tidak akan mentakrifkan operator untuk anda: definisi tidak akan menjadikan anda lebih bijak. Lebih baik melihatnya dalam tindakan. Operator boleh dibahagikan kepada beberapa kumpulan, yang akan kami periksa sekarang."

1) " Operator matematik "

Simbol Contoh Nama Penerangan (apa yang dilakukannya)
+ a + b Operator tambahan Operator tambahan.
- c - d Operator tolak Menolak nombor kedua daripada nombor pertama.
* a * t Operator pendaraban Mendarab dua nombor.
/ a / b Operator bahagian Membahagi nombor pertama dengan kedua.
% c % d Membahagi nombor pertama dengan kedua. Mengira baki selepas membahagi nombor pertama dengan kedua.
- -a Unary tolak Menukar tanda pembolehubah kepada sebaliknya.
Tambah kepada tolak, dan tolak kepada tambah.
+ +a Tambah Unary Tidak mengubah apa-apa. Ini telah ditambahkan untuk memuji operator tolak unary. Ia hanya untuk penampilan.

"Saya mengenali ini dari sekolah. Perisian tegar saya termasuk kursus sekolah."

"Tetapi, ada apa dengan tanda peratus itu, sejenis sihir?"

"Ia adalah pengendali " baki selepas pembahagian ". Jika 11 dibahagikan dengan 5, maka kita mendapat 2 dan baki 1. 1 ini boleh diperolehi dengan menulis 11 % 5;"

"Apabila anda membahagikan integer dalam Java, hasilnya juga merupakan integer. Baki daripada operasi bahagi diabaikan begitu sahaja. Jika kita membahagi 8 dengan 5, kita mendapat 1."

Ungkapan Hasilnya
19 / 10 1 Jika kita bahagikan 19 dengan 10, hasilnya ialah 1 dengan baki 9.
19 % 10 9 Jika kita bahagikan 19 dengan 10, hasilnya ialah 1 dengan baki 9.
2 / 5 0 Jika kita bahagikan 2 dengan 5,  hasilnya ialah 0 dengan baki 2.
16 % 2 0 Jika kita bahagikan 16 dengan 2, hasilnya ialah 8 dengan baki 0.

"Tetapi untuk apa kita memerlukan bakinya?"

"Andaikan anda perlu menyemak sama ada integer genap. Kemudian anda boleh menulis:"

if (a % 2 == 0)

"Dan jika anda perlu menyemak sama ada b ganjil, maka anda boleh menulis:"

if (b % 2 == 1)

"Atau untuk menyemak sama ada d boleh dibahagikan dengan 3:"

if (d % 3 == 0)

"Menarik. Saya akan ingat itu."

2)  " Operator perbandingan "

Simbol Contoh Nama Penerangan (apa yang dilakukannya)
< a < b Kurang daripada Semak untuk melihat sama ada a kurang daripada b.
<= c <= d Kurang daripada atau sama dengan Semak untuk melihat sama ada c kurang daripada atau sama dengan d.
> a > b Lebih besar daripada Semak untuk melihat sama ada a lebih besar daripada b.
>= c >= d Lebih besar daripada atau sama dengan Semak untuk melihat sama ada c lebih besar daripada atau sama dengan d.
== i == j sama Semak untuk melihat sama ada i sama dengan j.
!= a != 0 Tidak sama dengan Semak untuk melihat sama ada a tidak sama dengan sifar.

"Saya sudah menggunakan semua ini."

"Dan apakah perbezaan utama antara pengendali ini dan pengendali matematik?"

"Jika kita menambah dua nombor, kita mendapat nombor; tetapi, jika kita membandingkan dua nombor, kita mendapat benar atau salah."

"Betul. Hasil perbandingan ialah nilai " nilai logik ", yang, seperti yang anda ketahui, diwakili oleh jenis boolean. Terdapat dua kemungkinan: benar atau salah.

"Ya, itu semua jelas. Saya sudah tahu."

3) " Operator logik "

Simbol Contoh Nama Penerangan (apa yang dilakukannya)
&& a && b DAN Keputusan ungkapan adalah benar hanya apabila kedua-dua a dan b adalah benar.
|| c || d ATAU Keputusan ungkapan adalah benar jika sama ada a atau b adalah benar. Kedua-duanya atau sekurang-kurangnya satu.
! !a TIDAK Keputusan ungkapan adalah benar hanya jika a adalah palsu.

"Pengendali logik hanya boleh digunakan dengan pembolehubah atau ungkapan boolean."

Contoh Penerangan
boolean a = true;
boolean b = true;if (a && b)
Keadaan if adalah benar jika kedua-dua nilai adalah benar
Dalam erti kata lain, jika kedua-dua a dan b adalah benar, maka hasilnya adalah benar .
boolean a = true;
boolean b = false;if (a || b)
Keadaan if adalah benar jika sekurang-kurangnya satu nilai adalah benar
Dalam erti kata lain, jika sama ada a atau b adalah benar, maka hasilnya adalah benar .
boolean b = false;

if (!b)

Keadaan jika benar jika b tidak benar.
Dengan kata lain, jika   b adalah palsu , maka hasilnya adalah  benar .
int a = 2, b = 3, c = 4;

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

Jika a kurang daripada b dan a kurang daripada c, maka keputusan ungkapan itu adalah benar.
a, b, dan c ialah integer, tetapi hasil perbandingan integer ialah nilai logik (true, false), yang bermaksud kita boleh menggunakan operator logik.

"Saya sudah tahu semua ini."

"Betul ke? Mari kita sambung, kalau begitu."

4) " Operator bitwise "

Simbol Contoh Nama Penerangan (apa yang dilakukannya)
& a & b DAN Bitwise DAN
| c | d ATAU Bitwise ATAU
~ ~a TIDAK Bitwise TIDAK
^ a ^ b XOR Bitwise "EKSKLUSIF ATAU"

" Operator bitwise melakukan operasi bit demi bit pada integer."

"Apa itu?"

"Setiap nombor diwakili sebagai satu set bit, dan kemudian hasilnya dikira seperti berikut:"

"Jika bit pertama kedua-dua nombor ialah 1, maka bit pertama keputusannya ialah 1."

"Jika bit kedua kedua-dua nombor ialah 1, maka bit kedua keputusan akan menjadi 1. Dan seterusnya."

"Adakah itu benar untuk semua pengendali bitwise?"

"Ia jauh lebih mudah daripada itu. Sedikit hanya boleh mempunyai dua nilai, 0 dan 1, bukan?"

"Betul."

"Kemudian fikirkan 1 sebagai benar, dan 0 sebagai palsu. Operasi pada bit individu kemudiannya akan hampir sama dengan operasi logik:"

Ungkapan logik Ungkapan bitwise
benar && benar == benar 1&1 == 1
benar && salah == salah 1&0 == 0
benar || benar == benar 1|1 == 1
benar || palsu == benar 1|0 == 1
palsu || palsu = palsu 0|0 == 0
!palsu == benar ~0 == 1
!benar == salah ~1 == 0

"Oh! Itu sangat mudah."

"Ya, cuma jangan lupa bahawa operasi bitwise menggunakan bit yang sepadan daripada dua nombor."

"Ya, saya masih ingat: bit pertama satu nombor dipasangkan dengan bit pertama kedua, dan hasilnya juga ditulis pada bit pertama. Dan perkara yang sama berlaku untuk bit yang lain."

"Betul. Awak ada soalan lain?"

"Ada apa dengan XOR dan 'eksklusif atau'?"

"Ia adalah sekeping kek: apabila nilai berbeza, ia benar; apabila ia sama, ia adalah palsu."

Ungkapan logik Ungkapan bitwise
benar XOR benar == salah 1 ^ 1 == 0
palsu XOR palsu == palsu 0 ^ 0 == 0
benar XOR salah == benar 1 ^ 0 == 1
palsu XOR benar == benar 0 ^ 1 == 1

Berikut ialah beberapa lagi contoh operasi bitwise:

Contoh Nombor sebagai bit Hasilnya sebagai bit Hasilnya
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

"Terima kasih, Bilaabo. Sekarang saya tahu."

"Terdapat satu lagi kumpulan operator bitwise, operator shift:"

5) " Operator shift "

Simbol Contoh Nama Penerangan (apa yang dilakukannya)
>> a >> b anjakan kanan Mengalihkan bit nombor a ke kanan dengan b digit.
<< c << d syif kiri Mengalihkan bit nombor c ke kiri dengan digit d.
>>> a >>> 2 anjakan kanan yang tidak ditandatangani Mengalihkan bit nombor a ke kanan sebanyak 2 digit.

"Apa jenis sihir jalanan ini?"

"Sebenarnya semuanya sangat mudah. ​​Lihatlah:"

Contoh Nombor sebagai bit Hasilnya sebagai bit Hasilnya
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 00 101 000 40

"Menukar bit nombor ke kiri dengan 1 adalah sama seperti mendarab nombor dengan 2. Mengalih dengan dua digit adalah bersamaan dengan pendaraban dengan 4, dengan tiga digit — pendaraban dengan 8, dan seterusnya."

"Menukar ke kanan sepadan dengan membahagi dengan 2, 4, 8, 16, dsb."

"Tetapi apakah perbezaan antara >>> dan >> pengendali?"

"Mereka berbeza apabila bekerja dengan nombor negatif. Ini kerana  nombor yang ditandatangani menggunakan bit paling kiri untuk menunjukkan tanda. Akibatnya, nombor negatif tidak lagi negatif apabila beralih ke kanan. Jadi, mereka muncul dengan dua operator berbeza. Semak ia:"

Ungkapan Hasilnya Penerangan
1 000 1010 >> 1 11 000 101 Nombor negatif kekal negatif.
Untuk nombor negatif, bit masuk diisi dengan 1s.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Nombor negatif tidak lagi negatif. Untuk nombor negatif, bit masuk diisi dengan 0s.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Peralihan bukan kitaran. Bit yang bergerak melepasi tepi kiri atau kanan nombor dibuang begitu sahaja."

6) " Pengendali tugasan "

"Saya dah tahu tugasan apa. Tapi kenapa awak cakap 'pengendali'?"

"Kerana terdapat beberapa daripada mereka ☺"

Operator Apa maksudnya
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;

"Saya rasa awak faham logiknya."

7) " Operator kenaikan dan pengurangan "

Notasi Contoh Penerangan
++ a++;
++b;
Menambah bilangan sebanyak 1.
-- d--;
--i;
Mengurangkan nombor atau pembolehubah sebanyak 1.

"Adakah terdapat perbezaan antara meletakkan dua tanda tolak sebelum atau selepas pembolehubah?"

"Ya, ada, walaupun tidak terlalu besar. Jika pembolehubah dengan salah satu pengendali ini adalah sebahagian daripada ungkapan atau tugasan, maka terdapat perbezaan. Saya lebih suka menunjukkan kepada anda melalui contoh:"

Contoh Apa sebenarnya yang berlaku Penerangan
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a mula-mula dinaikkan sebanyak 1, dan kemudian ia digunakan dalam ungkapan.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a mula-mula digunakan dalam ungkapan, dan kemudian meningkat sebanyak 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
Fungsi akan mengembalikan 3, tetapi nilai a akan dinaikkan sebanyak 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;
Hasilnya di sini ialah 13. Pertama, x akan meningkat sebanyak 1, dan nilai ini akan menggantikan sebutan pertama, dan kemudian x akan meningkat lagi sebanyak 1.

"Wah! Sedap!"

"Saya gembira anda menyukainya. Tetapi, jika tiada ungkapan atau tugasan, maka tiada perbezaan:"

"x++ bersamaan dengan x = x + 1."

"++x bersamaan dengan x = x + 1."

"Saya akan ingat itu. Terima kasih, Bilaabo."

8)  " Operator ternary "

"Pengendali ini bukan sahaja menggunakan satu atau dua pembolehubah atau ungkapan. Ia menggunakan tiga pembolehubah atau ungkapan sekaligus:"

Notasi Kod yang setara:
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;

"Nah, itu sangat mudah."

"Ya. Dan ia padat dan kodnya boleh dibaca. Selamat menggunakannya!"

9) " Lain-lain "

"Tidak kira betapa tersusunnya koleksi muzik anda, anda masih perlu mencipta folder "Pelbagai"."

"Ya, sesiapa yang pernah mengkategorikan muzik akan bersetuju sepenuhnya."

"Jadi, terdapat tiga lagi pengendali yang saya ingin beritahu anda tentang:"

Notasi Contoh Penerangan
() (a + b) * c Tanda kurung meningkatkan keutamaan pengendali.
Perkara dalam kurungan dilaksanakan terlebih dahulu.
[] c [i] = c [i + 1]; Dapatkan elemen tatasusunan mengikut indeks.
. int n = a.length; " dot operator " mengakses pembolehubah dan kaedah objek.

"Dan, akhirnya, berikut ialah jadual yang meringkaskan keutamaan pengendali:"

Operator Contoh
Keutamaan tertinggi (pengendali dilaksanakan mengikut susunan mereka dalam jadual ini)
()
[]
.
(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;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Keutamaan terendah (dilakukan terakhir)