Mari kita bercakap tentang operasi dalam Java: angka, logik, bitwise. Ini adalah asas teori yang pasti diperlukan untuk mempelajari cara memprogram.
Jadual 1. Operator aritmetik binari
Empat pengendali pertama tidak sepatutnya menimbulkan sebarang soalan: semuanya sama seperti dalam matematik. Pengendali terakhir, baki bahagian, juga tidak melakukan sesuatu yang terlalu rumit. Sebagai contoh, jika kita membahagi 24 dengan 7, kita mendapat 3 nombor bulat dan 3 baki. Selebihnya pengendali ini akan kembali:
Selain operator binari, Java mempunyai operator aritmetik unari.
Jadual 2. Operator aritmetik unari:
Contoh tambah dan tolak unary:
Operasi kenaikan dan pengurangan pada asasnya adalah mudah. Dalam kes pertama, pembolehubah dinaikkan sebanyak 1, dalam kes kedua, pembolehubah dikurangkan sebanyak 1. Contoh di bawah:
Jadual 3. Pengendali kenaikan-penurunan:
Demonstrasi:
Selain aritmetik, terdapat operasi perbandingan (dua nombor). Hasilnya akan sentiasa benar atau salah ( true / false ).
Jadual 4. Operator perbandingan
Contoh:
Jadual 5. Jadual Kebenaran Operator Negasi (TIDAK)
Jadual 6. Jadual kebenaran operator kata hubung (DAN)
Jadual 7. Jadual kebenaran operator disjunction (OR)
Jadual 8. Jadual kebenaran pengendali penambahan modulo (XOR)
Java mempunyai operasi logik yang sama:
Dan kepada
Kini, kami mempunyai operator trengkas (
Kadangkala hasil ungkapan boleh dikira daripada operan pertama. Inilah yang membezakan operator yang disingkatkan
Dalam kes pengendali trengkas, bahagian kedua ungkapan tidak dinilai. Tetapi ini berlaku hanya apabila hasil ungkapan sudah jelas daripada operan pertama.
Mari kita tunjukkan pengiraan dari 0 hingga 15 dalam perpuluhan dan binari:
Seperti yang anda lihat, semuanya tidak begitu rumit. Selain bit, terdapat unit maklumat biasa yang lain - bait , kilobait , megabait , gigabait , dsb. Anda mungkin tahu bahawa terdapat 8 bit dalam 1 bait . Apakah maksudnya? Ini bermakna 8 bit berturut-turut menduduki 1 bait. Berikut ialah contoh bait yang boleh:
Voila - ia tidak begitu rumit. Tetapi masih, sesuatu perlu dijelaskan.
Mari kita lihat ini menggunakan nombor 8-bit sebagai contoh:
Pendekatannya mudah dan, pada dasarnya, boleh difahami. Walau bagaimanapun, ia mempunyai kelemahan: kesukaran dalam melaksanakan operasi matematik. Contohnya, dengan penambahan nombor negatif dan positif. Mereka tidak boleh dilipat melainkan manipulasi tambahan dijalankan.
Dalam baris pertama kami mendapat nilai dalam sistem nombor binari tanpa mendahului sifar. Walaupun kita tidak melihat mereka, mereka ada di sana. Ini dibuktikan dengan baris kedua, di mana semua bit telah diubah menjadi yang terbalik. Inilah sebabnya kami melihat begitu banyak unit terkemuka. Ini adalah bekas sifar utama yang diabaikan oleh pengkompil apabila dicetak pada baris pertama. Berikut ialah program kecil yang turut memaparkan sifar utama untuk kejelasan.
Sekarang. Apakah yang anda boleh katakan tentang nombor yang dianjak ke kanan? Mereka boleh dibahagi dengan 2. Setiap kali kita beralih satu bit ke kanan, kita bahagikan nombor asal dengan 2. Jika nombor itu tidak boleh dibahagikan dengan 2, hasilnya akan dibundarkan ke arah tolak infiniti (bawah). Tetapi ini hanya berfungsi jika kita mengalihkan bit dengan tepat 1. Dan jika dengan 2 bit, bahagi dengan 4. Dengan 3 bit, bahagi dengan 8. Dengan 4 bit, bahagi dengan 16. Lihat? Kuasa 2... Apabila kita mengalihkan nombor
- Apakah jenis pengendali di Jawa?
- Operator Java dalam Kursus JavaRush
- Operasi nombor di Jawa
- Operasi Logik di Jawa
- Operasi bitwise di Jawa
- Keutamaan operasi di Jawa
- Contoh penggunaan yang berguna
Apakah jenis pengendali di Jawa?
Untuk sebarang operasi kami memerlukan sekurang-kurangnya dua perkara:- pengendali;
- operan.
Operator Java dalam Kursus JavaRush
Beberapa kuliah dikhaskan kepada pengendali Java pada tahap keempat pencarian pertama - Sintaks Java. Khususnya, pengendali bersyarat seperti boolean . Kursus ini mengandungi 22 tugasan yang akan membantu anda memahami kerja pengendali perbandingan, pengendali bersyarat dan pengendali logik.Operasi nombor di Jawa
Operasi yang paling biasa yang dilakukan oleh pengaturcara pada nombor ialah memberikan nilai berangka kepada pembolehubah. Dia, seperti pengendali,=
biasa kepada anda:
int a = 1;
int b = 2;
int c = 3;
Terdapat juga operasi aritmetik. Mereka dijalankan menggunakan pengendali aritmetik binari:
System.out.println(24 % 7); // prints 3
Berikut adalah contoh dari tapak dokumentasi Oracle rasmi: Program ini akan mengeluarkan yang berikut: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java membolehkan anda untuk menggabungkan: contohnya, tugasan operator dan operator aritmetik. Mari lihat contoh:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
Di sini kita telah menentukan pembolehubah x
dan memberikannya nilai sifar. Seterusnya, dalam setiap baris kami menetapkan nilai x
kepada jumlah nilai semasa pembolehubah x
dan satu. Terdapat penjelasan dalam komen untuk setiap baris. Prosedur ini dipanggil membesar atau menambah pembolehubah. Operasi penambahan daripada contoh di atas boleh digantikan dengan operasi yang serupa menggunakan gabungan pengendali:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Anda boleh menggabungkan operator tugasan dengan mana-mana operator aritmetik:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
Mari kita tunjukkan cara contoh terakhir berfungsi:
int x = 0;
x = (+5) + (+15); // Parentheses for clarity, it is possible without them
System.out.println("x = " + x);
int y = -x;
System.out.println("y = " + y);
int x = 9;
x++;
System.out.println(x); // 10
int y = 21;
y--;
System.out.println(y); // 20
Terdapat dua jenis operasi ini - postfix dan prefix. Dalam kes pertama, pengendali ditulis selepas pembolehubah, dalam kes kedua, sebelum pembolehubah. Satu-satunya perbezaan ialah apabila operasi kenaikan atau pengurangan dilakukan. Contoh dan penerangan dalam jadual di bawah. Katakan kita mempunyai pembolehubah:
int a = 2;
Kemudian:
int a = 1;
int b = 2;
boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);
comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);
comparisonResult = a > b;
System.out.println("a > b :" + comparisonResult);
comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);
comparisonResult = a < b;
System.out.println("a < b :" + comparisonResult);
comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
Demonstrasi:
Operasi Logik di Jawa
Mari kita lihat operasi logik dan jadual kebenaran bagi setiap daripada mereka:- operasi penolakan (
NOT
); - operasi kata hubung, logik DAN (
AND
); - operasi cerai, logik ATAU (
OR
); - operasi penambahan modulo, eksklusif ATAU (
XOR
).
!
— pengendali penafian;&&
— operator logik DAN (pendek);||
— operator OR logik (pendek);&
— bitwise DAN operator;|
— bitwise ATAU pengendali;^
— pengendali eksklusif ATAU bitwise.
public class LogicDemo {
public static void main(String[] args) {
notExample();
andExample();
orExample();
xorExample();
}
public static void notExample() {
System.out.println("NOT EXAMPLE:");
System.out.println("NOT false = " + !false);
System.out.println("NOT true = " + !true);
System.out.println();
}
public static void andExample() {
System.out.println("AND EXAMPLE:");
System.out.println("false AND false = " + (false & false));
System.out.println("false AND true = " + (false & true));
System.out.println("true AND false = " + (true & false));
System.out.println("true AND true = " + (true & true));
System.out.println();
}
public static void orExample() {
System.out.println("OR EXAMPLE:");
System.out.println("false OR false = " + (false | false));
System.out.println("false OR true = " + (false | true));
System.out.println("true OR false = " + (true | false));
System.out.println("true OR true = " + (true | true));
System.out.println();
}
public static void xorExample() {
System.out.println("XOR EXAMPLE:");
System.out.println("false XOR false = " + (false ^ false));
System.out.println("false XOR true = " + (false ^ true));
System.out.println("true XOR false = " + (true ^ false));
System.out.println("true XOR true = " + (true ^ true));
System.out.println();
}
}
Atur cara ini akan memaparkan: BUKAN CONTOH: BUKAN salah = benar BUKAN benar = salah DAN CONTOH: palsu DAN palsu = palsu palsu DAN benar = palsu benar DAN palsu = palsu benar DAN benar = benar ATAU CONTOH: palsu ATAU palsu = palsu palsu ATAU benar = benar benar ATAU salah = benar benar ATAU benar = benar XOR CONTOH: palsu XOR salah = palsu palsu XOR benar = benar benar XOR salah = benar benar XOR benar = palsu Operator logik hanya digunakan untuk boolean
pembolehubah. Dalam kes kami, kami menggunakannya secara langsung pada nilai, tetapi anda juga boleh menggunakannya dengan boolean
pembolehubah:
boolean
ungkapan:
&&
, ||
) dan operator bitwise yang serupa ( &
, |
). Apakah perbezaan antara mereka? Pertama, bitwise boleh digunakan pada integer. Kita akan bercakap tentang ini sedikit kemudian. Dan kedua, ada yang disingkatkan, sementara yang lain tidak. Untuk memahami rupa singkatan, mari lihat ungkapan:
false AND x = ?
true OR x = ?
Ini x
boleh mengambil sebarang nilai Boolean. Dan secara amnya, mengikut undang-undang logik dan jadual kebenaran, tidak kira sama ada ia x
benar atau salah , hasil ungkapan pertama akan menjadi palsu , dan keputusan kedua adalah benar . Tengok.
&&
dan ||
. Dalam ungkapan yang serupa dengan yang diterangkan di atas, mereka tidak menilai nilai operan kedua. Berikut adalah contoh kecil:
Operasi bitwise di Jawa
Nah, di sini kita sampai ke bahagian yang paling menarik: operasi bitwise. Seperti namanya, ini adalah operasi yang dilakukan pada bit. Tetapi sebelum kita menyelami topik ini, ada baiknya bercakap tentang bidang yang berkaitan.Perwakilan nombor dalam sistem nombor binari
Nombor, seperti maklumat lain dalam program, disimpan dalam memori komputer dalam kod binari. Kod binari ialah satu set sifar dan satu. Setiap sifar atau satu mewakili unit maklumat yang dipanggil bit.Menurut Wikipedia:
A bit (daripada digit perduaan bahasa Inggeris - nombor perduaan; juga permainan perkataan: bit Inggeris - piece, particle) ialah unit ukuran jumlah maklumat. 1 bit maklumat ialah simbol atau isyarat yang boleh membawa dua makna: hidup atau mati, ya atau tidak, tinggi atau rendah, dicas atau tidak dicas; dalam sistem binari ialah 1 (satu) atau 0 (sifar).Apakah jenis data yang digunakan oleh operator bitwise?
Operasi bitwise dalam Java hanya dilakukan pada integer. Integer disimpan dalam memori komputer sebagai satu set bit. Kita boleh mengatakan bahawa komputer menukarkan sebarang maklumat ke dalam sistem nombor binari (satu set bit) dan hanya kemudian berinteraksi dengannya. Tetapi bagaimana sistem nombor binari berfungsi? Dalam sistem nombor perpuluhan kita hanya mempunyai 10 simbol: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Kami menggunakan simbol ini untuk mengira. Selepas 9 datang 10, selepas 19 - 20, selepas 99 - 100, selepas 749 - 750. Iaitu, kami menggunakan gabungan 10 simbol yang tersedia dan boleh menggunakannya untuk mengira "dari sifar hingga makan tengah hari." Dalam sistem nombor binari, bukannya sepuluh simbol, hanya ada dua - 0, 1. Tetapi dengan menggabungkan simbol-simbol ini mengikut prinsip yang sama seperti dalam sistem perpuluhan, kita boleh mengira tanpa had.
00000000 - 1 byte
10110010 - 1 byte
01011011 - 1 byte
Bilangan gabungan tidak berulang bit yang mungkin dalam satu bait ialah 256 (2 8 = 256). Tetapi mari kita kembali lebih dekat ke Jawa. Terdapat jenis data integer - byte
. Jenis ini boleh mengambil nilai dari -128 hingga 127 dan satu nombor dalam memori komputer mengambil masa tepat 8 bit, atau 1 bait. Satu nombor jenis ini menggunakan tepat 1 byte
memori komputer. Dan di sini nama-nama bertepatan bukan secara kebetulan. Seperti yang kita ingat, 1 bait boleh menyimpan 256 nilai yang berbeza. Dan satu nombor jenis byte
boleh mengambil 256 nilai yang berbeza (128 negatif, 127 positif dan 1 sifar). Setiap nilai nombor byte
mempunyai set unik lapan bit. Ini berlaku bukan sahaja dengan type byte
, tetapi dengan semua jenis integral. Jenis byte
diberikan sebagai contoh sebagai yang terkecil. Jadual di bawah menunjukkan semua jenis integer Java dan ruang memori yang didudukinya: Pertimbangkan jenis int
. Ia boleh menyimpan 2147483648 nilai negatif, 2147483647 nilai positif dan satu sifar. Jumlah:
2147483648 + 2147483647 + 1 = 4294967296.
Jenis ini menggunakan 32 bit dalam memori komputer. Bilangan kombinasi yang mungkin daripada set 32 sifar dan satu ialah:
232 = 4294967296.
Nombor yang sama dengan bilangan nilai yang boleh disimpan oleh jenis itu int
. Ini hanyalah demonstrasi hubungan antara julat nilai jenis data dan saiznya (bilangan bit dalam ingatan). Sebarang nombor dari mana-mana jenis dalam Java boleh ditukar kepada binari. Mari lihat betapa mudahnya ini boleh dilakukan menggunakan bahasa Java. Kita akan belajar daripada contoh jenis int
. Jenis ini mempunyai kelas pembalut sendiri - Integer
. Dan dia mempunyai satu toBinaryString
, yang akan melakukan semua kerja untuk kita:
int
nombor itu mengambil 32 bit. Tetapi apabila kita mencetak nombor 10 dalam contoh di atas, kita melihat 1010 dalam konsol. Ini kerana sifar pendahuluan tidak dicetak. Jika ia dipaparkan, bukannya 1010 kita akan melihat dalam konsol 000000000000000000000000000001010. Tetapi untuk memudahkan persepsi, semua sifar pendahuluan diabaikan. Tidak begitu sukar sehingga anda bertanya kepada diri sendiri: bagaimana dengan nombor negatif? Ia melihat maklumat hanya dalam sistem binari. Ternyata tanda tolak juga perlu ditulis dalam kod binari. Ini boleh dilakukan menggunakan kod langsung atau pelengkap.
Kod langsung
Kaedah mewakili nombor dalam sistem nombor binari, di mana bit paling ketara (bit paling kiri) diperuntukkan kepada tanda nombor tersebut. Jika nombor itu positif, bit paling kiri ditulis 0, jika negatif - 1.Kod tambahan
Dengan menggunakan kod tambahan, anda boleh mengelakkan keburukan kod langsung. Terdapat algoritma mudah untuk mendapatkan kod tambahan nombor. Mari cuba dapatkan kod tambahan untuk nombor -5. Mari kita wakili nombor ini menggunakan kod pelengkap dua dalam sistem nombor binari. Langkah 1. Kami memperoleh perwakilan nombor negatif menggunakan kod langsung. Untuk -5 ia akan menjadi 10000101. Langkah 2. Terbalikkan semua digit kecuali digit tanda. Mari gantikan semua sifar dengan satu, dan satu dengan sifar di mana-mana kecuali bit paling kiri.
10000101 => 11111010
Langkah 3. Tambahkan satu pada nilai yang terhasil:
11111010 + 1 = 11111011
sedia. Kami mendapat nilai -5 dalam sistem nombor binari menggunakan kod pelengkap dua. Ini penting untuk memahami bahan berikut, kerana Java menggunakan kod pelengkap dua untuk menyimpan nombor negatif dalam bit.
Jenis operasi bitwise
Sekarang kita telah menangani semua pengenalan, mari kita bercakap tentang operasi bitwise dalam Java. Operasi bitwise dilakukan pada integer dan hasilnya ialah integer. Dalam proses itu, nombor ditukar kepada binari, operasi dilakukan pada setiap bit, dan hasilnya ditukar kembali kepada perpuluhan. Senarai operasi adalah dalam jadual di bawah: Seperti yang telah kita ketahui, nombor boleh diwakili sebagai satu set bit. Operasi bitwise melakukan operasi pada setiap bit perwakilan sedemikian. Mari ambilNOT
, AND
, OR
, XOR
. Ingat bahawa kami baru-baru ini melihat jadual kebenaran hanya untuk operan logik. Dalam kes ini, operasi yang sama digunakan pada setiap bit integer.
Operator unary bitwise BUKAN ~
Operator ini menggantikan semua sifar dengan satu, dan semua sifar dengan sifar. Katakan kita mempunyai nombor 10 dalam tatatanda perpuluhan. Dalam perduaan, nombor ini ialah 1010. Jika kita menggunakan operator penolakan bitwise unary pada nombor ini, kita mendapat sesuatu seperti ini: Mari kita lihat rupanya dalam kod Java:public static void main(String[] args) {
int a = 10;
System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
Sekarang mari lihat apa yang dipaparkan dalam konsol:
Bitwise DAN operator
Operator ini digunakan untuk dua nombor. Ia melakukan operasiAND
antara bit setiap nombor. Mari kita lihat contoh: Operasi ini dilakukan pada dua nombor. Contoh dalam kod Java:
Bitwise ATAU pengendali
ATAU terpakai kepada dua nombor. Ia melakukan operasi OR antara bit setiap nombor: Sekarang mari kita lihat bagaimana ini akan kelihatan seperti dalam IDEA:Operasi bitwise, eksklusif ATAU (XOR)
Mari kita lihat contoh yang sama, tetapi dengan operasi baharu: Kod contoh:Anjakan bitwise ke kiri
Operator ini boleh digunakan untuk dua operan, iaitu, dalam operasix << y
, bit nombor x
akan beralih y
kedudukan ke kiri. Apakah maksudnya? Mari kita lihat contoh operasi.Hasil 10 << 1
operasi akan menjadi nombor 20 dalam sistem perpuluhan. Seperti yang anda boleh lihat daripada rajah di atas, semua bit dianjak ke kiri sebanyak 1. Semasa operasi ini, nilai bit paling ketara (bit paling kiri) hilang. Dan bit paling tidak ketara (bit paling kanan) diisi dengan sifar. Apa yang anda boleh katakan tentang operasi ini?
-
Dengan mengalihkan bit nombor
X
denganN
bit ke kiri, kami mendarabkan nombor ituX
dengan 2 N .Berikut ialah contoh:
-
Tetapi! Tanda nombor mungkin berubah jika bit dengan nilai 1 mengambil kedudukan paling kiri.
-
Jika anda beralih ke kiri selama-lamanya, nombor itu akan bertukar menjadi 0. Mari tunjukkan mata 2 dan 3:
Alih bitwise ke kanan
Operator ini digunakan untuk dua operan. Itu. dalam operasix >> y
, bit nombor x
akan beralih y
kedudukan ke kanan. Mari kita lihat contoh lain. Marilah kita menganalisis operasi secara skematik 10 >> 1
. Mari kita alihkan semua bit kedudukan nombor 10 satu ke kanan: Semasa operasi anjakan, kita kehilangan bit yang betul. Mereka hilang begitu saja. Bit paling kiri adalah tanda nombor (0 adalah positif, 1 adalah negatif). Oleh itu, dalam nilai akhir ia diletakkan sama seperti dalam nombor asal. Contoh dengan nombor negatif: Bit paling kanan hilang, dan bit paling kiri disalin daripada nombor asal, sebagai tanda kehormat bagi nombor itu. Bagaimana untuk melakukan semua ini dalam IDEA? Pada dasarnya, tidak ada yang rumit, hanya ambil dan gerakkannya:
X
ke N
kanan dengan bit, kita membahagikan nombor itu X
dengan 2 kepada kuasa 2 N
. Demonstrasi:
public class BitOperationsDemo {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
int shiftOperationResult = 2048 >> i;
int devideOperationResult = 2048 / (int) Math.pow(2, i);
System.out.println(shiftOperationResult + " - " + devideOperationResult);
}
}
}
Apa yang berlaku di sini?
-
Gelung di mana pembolehubah i ditambah dari 1 hingga 10.
- Setiap lelaran kita mengira 2 nilai:
-
Kami menulis ke dalam pembolehubah
shiftOperationResult
hasil peralihan nombor 2048 dengan i bit ke kanan; -
devideOperationResult
Kami menulis hasil pembahagian nombor 2048 dengan 2 kepada kuasa i kepada pembolehubah . -
Kami memaparkan dua nilai yang diperoleh secara berpasangan.
GO TO FULL VERSION