JavaRush /Blog Java /Random-MS /Operator Logik di Jawa

Operator Logik di Jawa

Diterbitkan dalam kumpulan
Operasi logik di Jawa.  Operasi bitwise dalam Java - 1

Operasi Logik di Jawa

Operasi logik dilakukan menggunakan operator Boolean. Maafkan tautologi, tetapi inilah keadaannya. Operasi logik asas (dalam pengaturcaraan dan matematik) boleh digunakan pada hujah logik (operand), dan juga boleh digunakan untuk membentuk ungkapan yang lebih kompleks, serupa dengan operasi aritmetik pada nombor. Contohnya ungkapan:

(a | b) | (c < 100) & !(true) ^ (q == 5)
ialah ungkapan logik kompleks dengan empat operan: (a | b), di mana аdan bialah pembolehubah jenis boolean (c < 100) (true) (q == 5) . Sebaliknya, ungkapan logik ringkas (a | b)juga terdiri daripada dua hujah operan. Operan logik ialah ungkapan yang boleh dikatakan benar atau salah, benar atau salah . Dalam bahasa Java, operan Boolean ialah ungkapan jenis booleanatau Boolean, sebagai contoh:
  • (2 < 1)— operan logik, nilainya palsu
  • true- operan logik yang nilainya jelas benar
  • boolean a- juga boleh menjadi operan logik, seperti Boolean a
  • int a = 2- bukan operan logik , ia hanyalah pembolehubah jenisint
  • String a = "true"juga bukan operan logik . Ini ialah rentetan yang nilai teksnya ialah "true".
Operasi logik berikut tersedia dalam Java:
  • Penafian logik , juga dikenali NOTsebagai penyongsangan. Di Jawa, ia ditunjukkan oleh !simbol “ ” sebelum operan. Berlaku pada satu operan.
  • Logik dan , ia juga merupakan ANDkata hubung. Ditandakan dengan &simbol “ ” antara dua operan yang digunakan.
  • Logik atau dalam Java , ia juga - OR, ia juga disjunction. Di Jawa, ia ditunjukkan oleh simbol “ |” antara dua operan.
  • Eksklusif atau , XOR, perpecahan yang ketat. Di Jawa, ia ditunjukkan oleh simbol “ ^” antara dua operan.
  • Di Java, operator logik termasuk bersyarat atau , dilambangkan sebagai ||, serta bersyarat dan - &&.
Nota: juga dalam logik matematik mereka menganggap hubungan kesetaraan, dengan kata lain, kesamaan. Walau bagaimanapun, di Jawa, pengendali kesamarataan==tidak dianggap sebagai pengendali logik. Perhatian! Di Java, operator logik&,|dan^juga digunakan untuk integer. Dalam kes ini, ia berfungsi sedikit berbeza dan dipanggil operator logik bitwise (atau bitwise). Mengenai mereka - menjelang akhir artikel. Mari lihat jadual dengan penerangan ringkas bagi setiap operator logik Java, dan di bawah kami akan menerangkannya dengan lebih terperinci dan memberikan contoh kod.
pengendali Java Nama taip Penerangan Ringkas Contoh
! Logik "tidak" (negasi) Unary !xbermaksud “bukan x”. Mengembalikan benar jika operan adalah palsu . Mengembalikan palsu jika operan adalah benar . boolean x = true;
Kemudian
// !x == false
& Logik DAN ( AND, pendaraban) binari Mengembalikan benar jika kedua-dua operan adalah benar . a = true;
b = false;
Kemudian
a & b == false
| Logik ATAU ( OR, tambahan) binari Mengembalikan benar jika sekurang-kurangnya satu daripada operan adalah benar . a = true;
b = false;
Kemudian
a | b == true
^ Logik eksklusif ATAU ( XOR) binari Mengembalikan benar jika satu dan hanya satu operan adalah benar . Mengembalikan salah jika kedua-dua operan adalah benar atau salah . Pada asasnya, ia kembali benar jika operan berbeza. a = true;
b = false;
Kemudian
a ^ b == true
&& Bersyarat DAN (logik pendek DAN) binari Sama seperti , &tetapi jika operan di sebelah kiri &adalah false , operator ini mengembalikan false tanpa menyemak operan kedua.
|| Bersyarat ATAU (logik pendek ATAU) binari Sama seperti , |tetapi jika operator di sebelah kiri adalah true , operator mengembalikan true tanpa menyemak operan kedua.

Operasi logik dalam kursus JavaRush

Tiada pelarian daripada operasi logik, dan dalam kursus JavaRush ia muncul dari peringkat pertama, bersama-sama dengan syarat dan jenis data boolean. Pengaturcara secara beransur-ansur belajar menggunakan kaedah logik matematik. Untuk manipulasi yang lebih yakin dengan pembinaan logik, ketangkasan dan pemahaman proses tertentu diperlukan. Jadi operasi ini didekati dengan lebih terperinci dan pada tahap yang sama sekali berbeza pada akhir pencarian Multithreading, apabila kebanyakan pelajar tidak lagi terlalu terganggu secara langsung oleh sintaks dan pembinaan, tetapi cuba menyelidiki intipati tugasan.

Operasi logik di Jawa.  Operasi bitwise dalam Java - 2

Operator penafian logik !

Operator ini adalah unary, bermakna ia digunakan pada satu ungkapan atau operan Boolean. Ia sangat mudah untuk difahami, seperti mana-mana penafian: pengendali hanya menukar makna ungkapan kepada sebaliknya. Jadual kebenaran atau keputusan menjalankan operasi penolakan:
Nilai a !a
salah benar
benar salah
Contoh. Operasi penafian logik
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       System.out.println(!a); // here our boolean expression reverses its value
       System.out.println(!false); // non-false expression, as you might guess, will be equal to... what?
       System.out.println(!(2 < 5)); // expression (2 < 5) is true, so its negation is false

   }
}
Output program adalah seperti berikut:

false
true
false

Logik DAN - &, serta bersyarat DAN - &&

Logik AND atau kata hubung digunakan pada dua ungkapan, dan hasilnya akan benar hanya jika kedua-dua operan adalah benar. Iaitu, jika salah satu daripada aatau operan badalah false , maka ungkapan itu a & bakan menjadi palsu tanpa mengira nilai pengendali kedua. Jika anda membayangkan bahawa benar ialah nombor 1 dan palsu ialah 0, maka pengendali &berfungsi sama seperti pendaraban biasa. Oleh itu, logik DAN sering dipanggil "pendaraban logik." Dan, dengan cara ini, fakta ini membantu dengan cepat mengingati operasi pengendali &dan tidak mengelirukannya dengan logik atau operator |. Jadual kebenaran DAN, ia juga merupakan hasil kerja pengendali&
a b a&b
benar benar benar
benar salah salah
salah benar salah
salah salah salah
Logik DAN, ia juga merupakan kata hubung, contoh:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(a & b); // if we multiply true by false, we will definitely get false
       System.out.println(a & c); // true to true will be true
       System.out.println(false & (2 > 5));
 System.out.println((2 < 5) & false);
 // regardless of the truthfulness of the expression in brackets, in which case we have to be content with false
   }
}
Hasil program:

false
true
false
false
Pengendali &&kadangkala dipanggil "pendek DAN". Ia menghasilkan hasil yang sama apabila bekerja dengan operan logik sebagai pengendali &. Walau bagaimanapun, terdapat perbezaan dalam karyanya sendiri. Jadi, anda sudah perasan bahawa jika a & boperan dalam ungkapan ( ) aadalah false , maka tidak masuk akal untuk menyemak nilai operan b: hasil operasi pasti akan false . Oleh itu, jika kita pada asasnya tidak memerlukan nilai operan kedua, menggunakannya &&kita mengurangkan bilangan pengiraan dalam atur cara. Jika kita menggantikan semua pengendali dalam contoh &dengan &&, hasilnya akan sama, tetapi program itu sendiri akan berjalan sedikit lebih cepat (walaupun kita tidak akan perasan ini, kerana kita bercakap tentang mili-mikro... ringkasnya , unit masa yang sangat kecil).

Logik OR ialah operator |, serta OR bersyarat ialah operator ||

Operator OR dalam Java diwakili oleh simbol |. ATAU logik atau disjungsi digunakan pada dua ungkapan, dan hasilnya akan menjadi palsu jika dan hanya jika kedua-dua operan adalah palsu. Di sini kita sedikit sebanyak memerhatikan gambar yang sama seperti dalam kes operator &, tetapi sebaliknya. Iaitu, jika sekurang-kurangnya satu operan adalah benar , maka ungkapan itu a | bdijamin benar tanpa mengira nilai pengendali kedua. Jika &ia berkelakuan seperti pendaraban logik, maka OR ialah penambahan logik, jika anda bayangkan bahawa benar ialah 1 dan palsu ialah 0. Ingatlah bahawa penambahan logik berfungsi secara berbeza daripada penambahan biasa. 1 + 1 dalam kes ini adalah sama bukan dengan 2, tetapi dengan 1 (nombor 2 semata-mata tidak wujud dalam sistem ini). Kadang-kadang percanggahan difahami sebagai maksimum 0 dan 1, dan dalam kes ini, jika sekurang-kurangnya satu operan adalah sama dengan 1 ( benar ), kita mendapat betul-betul benar . ATAU jadual kebenaran, juga dikenali sebagai hasil pengendali |:
a b a | b
benar benar benar
benar salah benar
salah benar benar
salah salah salah
Logik OR, juga dikenali sebagai disjunction, contoh:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a | b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a | c);
       System.out.println((2 < 5) | false); // expression (2 < 5) is true, which means that for any second operand we get a true result
       System.out.println((2 > 5) | true);

   }
}
Keputusan:

false
true
true
true
Jika kita menggunakan operator bersyarat ATAU - ||bukannya |, kita akan mendapat keputusan yang betul-betul sama, tetapi, seperti dalam kes bersyarat AND &&, ia akan bertindak secara ekonomi: jika kita "terhadap" operan pertama sama dengan true , nilai operan kedua tidak disemak, tetapi serta-merta hasilnya adalah benar .

XOR Java - logik eksklusif ATAU - pengendali ^

XOR, penambahan modulo 2, XOR logik, penolakan logik, disjungsi ketat, pelengkap bitwise... operator ^mempunyai banyak nama dalam algebra Boolean. Hasil daripada menggunakan operator ini kepada dua operan akan menjadi benar jika operan adalah berbeza dan palsu jika operan adalah sama. Oleh itu, adalah mudah untuk membandingkannya dengan menolak sifar ( palsu ) dan satu ( benar ). Jadual kebenaran XOR, juga dikenali sebagai hasil pengendali ^:
Boolean a Boolean b a^b
benar benar salah
benar salah benar
salah benar benar
salah salah salah
Contoh:
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       boolean c = true;
       System.out.println(!a ^ b); // Compose the use of two logical operators: a == true, so !a, as we already know, is false.
       System.out.println(a ^ c);
       System.out.println((2 < 5) ^ false);
       System.out.println((2 > 5) ^ true);
   }
}
Keputusan:

false
false
true
true

Keutamaan operasi logik

Sama seperti dalam matematik, dalam pengendali pengaturcaraan mempunyai susunan pelaksanaan tertentu apabila ia muncul dalam ungkapan yang sama. Operator unary mempunyai kelebihan berbanding yang binari, dan pendaraban (malah logik) berbanding penambahan. Kami telah meletakkan pengendali logik lebih tinggi dalam senarai, lebih tinggi keutamaan mereka:
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
Mari lihat contoh. Konjungsi dan disjungsi ( &dan |) mempunyai keutamaan yang berbeza:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println(a | b & c);
}
Jika kami telah bekerja dari kiri ke kanan, iaitu, mula-mula menggunakan operator |dan kemudian - &, kami akan menerima nilai false . Tetapi sebenarnya, jika anda menjalankan program ini, anda akan pasti bahawa output akan benar , kerana operator logik AND &akan mempunyai keutamaan yang lebih tinggi daripada operator OR logik |. Untuk mengelakkan kekeliruan, anda perlu ingat bahawa apa &yang berkelakuan seperti pendaraban dan |apa yang berkelakuan seperti penambahan. Anda boleh menukar susunan keutamaan. Hanya gunakan kurungan, sama seperti dalam matematik sekolah. Mari kita ubah kod contoh kita sedikit:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println((a|b)&c);
}
Apa khabar? Mula-mula kita menggunakan penambahan logik dalam kurungan, dan kemudian pendaraban. Hasilnya akan menjadi palsu .

Ungkapan logik yang kompleks

Sudah tentu, kita boleh menggabungkan ungkapan dan pengendali Boolean. Mari kita ingat ungkapan dari awal artikel:
(a | b) | (c < 100) & !(true) ^ (q == 5)
Sekarang ia tidak kelihatan begitu menakutkan. Mari tulis atur cara yang memaparkan nilainya, setelah sebelumnya menentukan nilai a, b, сdan q. Contoh pengiraan nilai ungkapan Boolean yang kompleks
public class Solution {
   public static void main(String[] args) {
       boolean a = true;
       boolean b = false;
       int c = 25;
       int q = 2;
       System.out.println((a|b) | (c < 100) & !(true)^(q == 5));
   }
}
Catatan:pembolehubah qkami adalah jenis int, tetapi q == 5ini adalah ungkapan Boolean, dan ia adalah sama dengan false , kerana di atas kita mulakan dengan qnombor 2. Begitu juga dengan pembolehubah c. Nombor ini bersamaan dengan 25, tetapi (c < 100) ialah ungkapan Boolean sama dengan benar . Hasil daripada program ini:

true
Ungkapan Boolean yang kompleks boleh digunakan untuk menguji keadaan yang sangat kompleks dan bercabang, tetapi ia tidak boleh digunakan secara berlebihan: ia menjadikan kod sukar dibaca.

Pengendali bitwise (bitwise).

Pada permulaan artikel, kami menyebut bahawa operator &, |dan ^boleh digunakan berhubung dengan jenis integer Java. Dalam kes ini mereka adalah pengendali bitwise. Mereka juga dipanggil bitwise, kerana satu digit adalah satu bit, dan operasi ini berfungsi secara khusus dengan bit. Sudah tentu, mereka berfungsi agak berbeza daripada operator logik, dan untuk memahami dengan tepat bagaimana, anda perlu tahu apa itu sistem nombor binari. Jika anda tidak tahu apa-apa mengenainya atau terlupa sepenuhnya, kami cadangkan anda membaca dahulu artikel Java: bits and bytes , dan ingatkan orang lain bahawa dalam sistem nombor binari hanya terdapat dua digit - 0 dan 1, dan semua data dalam komputer diwakili tepat dengan menggunakan sifar bersyarat dan satu. Mana-mana nombor yang kita biasa gunakan (perpuluhan; bagi mereka terdapat 10 digit berbeza dari 0 hingga 9, yang mana kita menulis sebarang nombor) boleh diwakili dalam sistem nombor binari. Anda boleh menukar nombor perpuluhan kepada perduaan menggunakan pembahagian berjujukan ke dalam lajur menggunakan asas sistem nombor (2). Baki pembahagian pada setiap langkah, ditulis dalam susunan terbalik, akan memberikan kita nombor perduaan yang dikehendaki. Di sini, sebagai contoh, ialah penukaran nombor perpuluhan 103 kepada perwakilan binari: Operasi logik di Jawa.  Operasi bitwise dalam Java - 3

Sistem nombor binari dalam kursus JavaRush

Dalam kursus JavaRush, mereka bercakap tentang sistem nombor binari semasa mengkaji pencarian MultiThreading (tahap 10, kuliah 1); selepas kuliah terdapat beberapa tugas untuk penyatuan. Walau bagaimanapun, topik ini tidak sukar sama sekali, dan walaupun anda belum sampai sejauh itu dalam kursus ini, anda mungkin akan memahaminya.

Selain &, |dan ^Java juga menggunakan operator bitwise:
  • ~ pengendali penafian bitwise
  • >>anjakan sedikit ke kanan
  • >>>anjakan kanan bitwise tidak ditandatangani
  • <<anjakan sedikit ke kiri
Bagi pemula, pengendali bitwise kelihatan sangat mengelirukan dan buatan. Mereka selalunya tidak memahami apa yang mereka perlukan, kecuali untuk menyelesaikan masalah pendidikan. Malah, ia boleh digunakan sekurang-kurangnya untuk mengatur pembahagian dan pendaraban yang cekap, dan profesional menggunakannya untuk pengekodan/penyahkod, penyulitan dan menjana nombor rawak.

Pengendali bitwise &, | dan ^

Mari lihat contoh cara pengendali ini berfungsi. Katakan kita mempunyai dua integer:
int a = 25;
int b = 112; 
Kita perlu menggunakan tiga operasi padanya &, |dan ^memaparkan hasilnya pada skrin. Berikut ialah kod program:
public class Solution {
   public static void main(String[] args) {

       int a = 25;
       int b = 112;

       int res1 = a & b;
       int res2 = a | b;
       int res3 = a ^ b;

       System.out.println("a & b = " + res1);
       System.out.println("a | b = " + res2);
       System.out.println("a ^ b = " + res3);

   }
}
Keputusan program adalah seperti berikut:

a & b = 16
a | b = 121
a ^ b = 105
Jika anda tidak memahami apa yang berlaku, hasilnya kelihatan sangat, sangat misteri. Malah, semuanya lebih mudah daripada yang kelihatan. Pengendali bitwise "melihat" nombor operan dalam bentuk binari mereka. Dan kemudian mereka menggunakan operator logik &, |atau ^pada digit (bit) yang sepadan bagi kedua-dua nombor. Jadi, untuk &bit terakhir perwakilan binari nombor 25 secara logiknya menjumlahkan sehingga bit terakhir perwakilan binari nombor 112, bit kedua terakhir dengan satu kedua terakhir, dan seterusnya: Operasi logik di Jawa.  Operasi bitwise dalam Java - 4Logik yang sama boleh dikesan dalam kes |dan ^. Operasi logik di Jawa.  Operasi bitwise dalam Java - 5

Anjakan sedikit ke kiri atau kanan

Terdapat beberapa operator anjakan bit di Jawa. Pengendali yang paling biasa digunakan <<ialah dan >>. Mereka mengalihkan perwakilan binari nombor ke kiri atau kanan, masing-masing, dan dalam kes peralihan ke kanan, sambil mengekalkan tanda (kami akan menerangkan maksud memelihara tanda di bawah). Terdapat satu lagi pengendali syif kanan >>>. Ia melakukan perkara yang sama tetapi >>tidak menyimpan tanda. Jadi, mari kita lihat kerja mereka menggunakan contoh. int a = 13 a << 1mengalihkan semua bit perwakilan binari nombor a ke kiri sebanyak 1 bit. Untuk memudahkan, mari kita bayangkan nombor 13 dalam binari sebagai 0000 1101. Malah, nombor ini kelihatan seperti ini: 00000000 00000000 00000000 00001101, kerana Java intmemperuntukkan 4 bait atau 32 bit untuk nombor. Walau bagaimanapun, ini tidak memainkan peranan dalam contoh, jadi dalam contoh ini kita akan menganggap nombor kita sebagai satu bait. Operasi logik di Jawa.  Operasi bitwise dalam Java - 6Bit yang dikosongkan di sebelah kanan diisi dengan sifar. Hasil daripada operasi ini, kita mendapat nombor 26. a << 2Ia mengalihkan semua bit perwakilan binari nombor ake kiri sebanyak 2 bit, dan dua bit yang dikosongkan di sebelah kanan diisi dengan sifar. Hasilnya, kita akan mendapat nombor 52. a << 3Hasilnya ialah 104... Perhatikan coraknya? Peralihan bitwise ake kiri dengan n kedudukan berfungsi seperti mendarab nombor adengan 2 kepada kuasa n. Perkara yang sama berlaku untuk nombor negatif. Ini -13 << 3akan memberikan hasil -104. a >> nmengalihkan perwakilan binari nombor n kedudukan ke kanan. Sebagai contoh, 13 >> 1 Mengubah nombor 1101 kepada nombor 0110, iaitu, 6. Dan 13 >> 2hasilnya akan menjadi 3. Iaitu, pada dasarnya, di sini kita membahagikan nombor dengan 2 kepada kuasa n, di mana n ialah bilangan anjakan ke kanan, tetapi dengan satu kaveat: jika nombor itu ganjil, semasa operasi ini kami nampaknya menetapkan semula bit terakhir nombor itu. Tetapi dengan yang negatif keadaannya agak berbeza. Katakan, cuba semak perkara yang akan dihasilkan oleh program jika anda memintanya melakukan operasi -13 >> 1. Anda akan melihat nombor -7, bukan -6, seperti yang anda fikirkan. Ini berlaku kerana cara nombor negatif disimpan dalam Java dan bahasa pengaturcaraan lain. Mereka disimpan dalam apa yang dipanggil kod pelengkap. Dalam kes ini, digit paling ketara (yang di sebelah kiri) diberikan di bawah tanda. Dalam kes nombor negatif, digit paling ketara ialah 1.

Kod tambahan

Mari kita pertimbangkan nombor int a = 13. Jika dalam atur cara anda mencetak perwakilan binarinya ke konsol menggunakan arahan System.out.println(Integer.toBinaryString(a));, maka kami akan mendapat 1101. Sebenarnya, ini adalah notasi trengkas, kerana nombor jenis intmengambil 4 bait dalam memori, jadi komputer "melihat" lebih banyak. seperti ini:

00000000 00000000 00000000 00001101
Digit yang paling ketara ialah sifar, yang bermaksud kita mempunyai nombor positif. Untuk menukar kepada kod tambahan:
  1. Kami menulis nombor -13 dalam apa yang dipanggil "kod langsung". Untuk melakukan ini, tukar digit paling ketara nombor kepada 1.
    Keputusan tindakan:

    
    10000000 0000000 0000000 00001101
  2. Seterusnya, kita terbalikkan semua bit (kita tukar 0 kepada 1, dan 1 kepada 0) kecuali bit tanda. Malah, kita telah pun mengubahnya.
    Hasil tindakan:

    
    11111111 11111111 11111111 11110010

    (ya, langkah 1 dan 2 boleh digabungkan, tetapi lebih baik untuk memikirkannya seperti itu)

  3. Tambahkan 1 pada nombor yang terhasil.
    Hasil tindakan:

    
    11111111 11111111 11111111 11110011
Nombor binari yang terhasil ialah -13, ditulis dalam kod pelengkap dua, dan anjakan bit (dan operasi lain) akan digunakan secara khusus padanya. Cuma perbezaan dalam logik operasi tidak ketara dalam semua operasi. Katakan, untuk anjakan yang sama ke kiri, perbezaannya tidak dapat dilihat; kita boleh bekerja dengan nombor negatif dengan cara yang sama seperti dengan nombor positif. Sekarang mari kita beralih ke kanan -13 >> 1. Oleh kerana pengendali kami >>mengekalkan tanda itu, dalam operasi ini semua bit yang dibebaskan di sebelah kiri diisi bukan dengan sifar, tetapi dengan satu. Oleh itu, menukar nombor

11111111 11111111 11111111 11110011
satu bit ke kanan, menghasilkan urutan bit berikut:

11111111 11111111 11111111 11111001
Jika kita menukar nombor ini kepada kod langsung (iaitu, mula-mula tolak 1, kemudian terbalikkan semua bit kecuali yang pertama) kita mendapat nombor:

10000000 00000000 00000000 00000111
atau -7. Memandangkan kita telah memahami operator syif kanan yang memelihara tanda, ia akan menjadi jelas bagaimana ia berbeza daripada operator >>>. a >>> n— operasi ini ialah anjakan yang tidak ditandatangani, iaitu, ia mengalihkan perwakilan binari nombor ake kanan dengan n bit, tetapi mengisi n bit yang dikosongkan di sebelah kiri bukan dengan yang, seperti operator >>, tetapi dengan sifar. Jom buat operasi -13 >>> 1. Kami sudah mempunyai nombor -13dalam pelengkap dua:

11111111 11111111 11111111 11110011
Dengan beralih ke kanan sebanyak 1 bit dan mengisi bit percuma dengan sifar, kita mendapat nombor berikut:

01111111 11111111 11111111 11111001
Apakah yang memberikan nombor dalam tatatanda perpuluhan 2147483641.

Operator penafian bitwise ~

Operator unary ini berfungsi dengan sangat mudah: ia membalikkan setiap bit perwakilan binari integer. Mari kita ambil nombor -13:

11111111 11111111 11111111 11110011
Operasi penafian bitwise ~13hanya akan membalikkan nilai setiap bit. Hasilnya kami mendapat:

00000000 00000000 00000000 00001100
Atau 12dalam bentuk perpuluhan.

Kesimpulan ringkas

  • Semua pengendali logik digunakan pada ungkapan Boolean, iaitu, yang boleh dikatakan benar atau salah .
  • Если операторы &, | or ^ применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания.
  • В математической логике операторам & и | соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция ~a.
  • Для логического отрицания булевского выражения a используется операция !a.
  • Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
  • Поразрядный сдвиг вправо может сохранять знак (>>), а может — не сохранять (>>>).
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION