JavaRush /Blog Jawa /Random-JV /Operator Logika ing Jawa

Operator Logika ing Jawa

Diterbitake ing grup
Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 1

Operasi Logika ing Jawa

Operasi logis ditindakake nggunakake operator Boolean. Ngapunten tautologi, nanging iki pancen kaya ngono. Operasi logis dhasar (ing pemrograman lan matématika) bisa ditrapake kanggo argumen logis (operand), lan uga bisa digunakake kanggo mbentuk ekspresi sing luwih rumit, padha karo operasi aritmetika ing nomer. Tuladhane ekspresi:

(a | b) | (c < 100) & !(true) ^ (q == 5)
minangka ekspresi logis kompleks kanthi papat operan: (a | b), ngendi аlan minangka bvariabel tipe boolean (c < 100) (true) (q == 5) . Operan logis yaiku ekspresi sing bisa diarani bener utawa salah, bener utawa salah . Ing basa Jawa, operan Boolean minangka ekspresi jinis utawa Boolean, contone: (a | b)boolean
  • (2 < 1)- operan logis, regane salah
  • true- operan logis sing nilai temenan bener
  • boolean a- uga bisa dadi operan logis, kaya Boolean a
  • int a = 2- ora operan logis , iku mung variabel saka jinisint
  • String a = "true"uga dudu operan logis . Iki minangka string sing nilai teks "true".
Operasi logis ing ngisor iki kasedhiya ing Jawa:
  • Negasi logis , uga dikenal NOTminangka inversi. Ing basa Jawa, iki dituduhake dening !simbol "" sadurunge operand. Ditrapake kanggo siji operan.
  • Logis lan , iku uga ANDkonjungsi. Dituduhake kanthi &simbol "" ing antarane rong operan sing ditrapake.
  • Logis utawa ing Jawa , iku uga - OR, iku uga disjunction. Ing Jawa, iku dituduhake dening simbol " |" antarane rong operand.
  • Eksklusif utawa ,, XORdisjunction ketat. Ing Jawa, iku dituduhake dening simbol " ^" antarane rong operand.
  • Ing Jawa, operator logis kalebu kondisional utawa , dilambangake minangka ||, uga kondisional lan - &&.
Cathetan: uga ing logika matematika padha nganggep hubungan kesetaraan, kanthi tembung liya, kesetaraan. Nanging, ing Jawa, operator kesetaraan==ora dianggep minangka operator logis. manungsa waé! Ing Jawa, operator logis&,|lan^uga ditrapake kanggo integer. Ing kasus iki, padha bisa rada beda lan disebut bitwise (utawa bitwise) operator logis. Babagan mau - ing pungkasan artikel. Ayo ndeleng tabel kanthi katrangan singkat babagan saben operator logis Jawa, lan ing ngisor iki bakal dijlentrehake kanthi luwih rinci lan menehi conto kode.
operator Jawa jeneng Jinis Katrangan singkat Tuladha
! Logika "ora" (negasi) Unary !xtegese "ora x". Ngasilake bener yen operan kasebut salah . Ngasilake salah yen operan bener . boolean x = true;
Banjur
// !x == false
& Logika AND ( AND, multiplikasi) binar Ngasilake bener yen loro operan bener . a = true;
b = false;
Banjur
a & b == false
| Logika OR ( OR, tambahan) binar Ngasilake bener yen paling ora siji saka operan bener . a = true;
b = false;
Banjur
a | b == true
^ Eksklusif logis UTAWA ( XOR) binar Ngasilake bener yen siji lan mung siji operan bener . Ngasilake salah yen loro operan bener utawa salah . Ateges, bali bener yen operan beda. a = true;
b = false;
Banjur
a ^ b == true
&& Kondisional AND (logika singkat AND) binar Padha, &nanging yen operan ing sisih kiwa &palsu , operator iki ngasilake palsu tanpa mriksa operan kapindho.
|| Conditional OR (singkat logika OR) binar Padha, |nanging yen operator ing sisih kiwa bener , operator bali bener tanpa mriksa operan kapindho.

Operasi logis ing kursus JavaRush

Ora ana uwal saka operasi logis, lan ing Course JavaRush padha katon saka tingkat pisanan, bebarengan karo kahanan lan jinis data boolean. Programer mboko sithik sinau nggunakake metode logika matematika. Kanggo manipulasi sing luwih yakin karo konstruksi logis, dexterity tartamtu lan pangerten proses tartamtu dibutuhake. Dadi operasi iki nyedhaki luwih rinci lan ing tingkat temen beda ing mburi nggoleki Multithreading, nalika paling mahasiswa ora maneh banget disambi langsung dening sintaksis lan construction, nanging nyoba kanggo delve menyang inti saka tugas.

Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 2

Operator negasi logis!

Operator iki unary, tegese iki ditrapake kanggo ekspresi utawa operan Boolean siji. Gampang banget dimangerteni, kaya negasi apa wae: operator mung ngganti makna ekspresi kasebut kanthi ngelawan. Tabel kebenaran utawa asil operasi negasi:
Nilai saka a !a
palsu bener
bener palsu
Tuladha. Operasi negasi logis
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 saka program bakal kaya ing ngisor iki:

false
true
false

Logis AND - &, uga kondisional AND - &&

Logis AND utawa konjungsi ditrapake kanggo rong ekspresi, lan asile bakal bener mung yen loro operan kasebut bener. Tegese, yen salah siji saka autawa operan biku palsu , banjur expression a & bbakal palsu preduli saka Nilai saka operator kapindho. Yen sampeyan mbayangno yen bener yaiku angka 1 lan palsu yaiku 0, mula operator &bisa kerjane padha karo perkalian biasa. Mulane, logika AND asring diarani "perkalian logis." Lan, kanthi cara iki, kasunyatan iki mbantu cepet ngelingi operasi operator &lan ora bingung karo logis utawa operator |. Tabel bebener AND, iku uga asil saka karya operator&
a b a&b
bener bener bener
bener palsu palsu
palsu bener palsu
palsu palsu palsu
Logis AND, uga minangka konjungsi, conto:
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
Operator kasebut &&kadhangkala disebut "singkat AND". Iki ngasilake asil sing padha nalika nggarap operan logis minangka operator &. Nanging, ana bedane ing karyane dhewe. Dadi, sampeyan wis ngelingi yen a & boperan ing ekspresi () aiku palsu , mula ora ana gunane kanggo mriksa nilai operan kasebut b: asil operasi kasebut mesthi palsu . Dadi yen kita ora dhasar mbutuhake nilai operan kapindho, kanthi nggunakake &&kita nyuda jumlah petungan ing program kasebut. Yen kita ngganti kabeh operator ing conto &karo &&, asil bakal persis padha, nanging program dhewe bakal mbukak sethitik luwih cepet (sanadyan kita ora sok dong mirsani iki, awit kita ngomong bab mili-mikro ... , unit wektu sing cilik banget).

Logis OR yaiku operator |, uga OR kondisional yaiku operator ||

Operator OR ing Jawa diwakili dening simbol |. Utawa logis utawa disjunction ditrapake kanggo rong ekspresi, lan asile bakal salah yen lan mung yen loro operan iku palsu. Kene kita kanggo sawetara ombone mirsani gambar padha ing cilik saka operator &, nanging persis ngelawan. Tegese, yen paling ora siji operan bener , mula ekspresi kasebut a | bdijamin bener , preduli saka regane operator kapindho. Yen &tumindak kaya perkalian logis, banjur UTAWA minangka tambahan logis, yen sampeyan mbayangno yen bener 1 lan palsu 0. Mung elinga yen tambahan logis bisa beda saka tambahan normal. 1 + 1 ing kasus iki ora padha karo 2, nanging 1 (nomer 2 mung ora ana ing sistem iki). Kadhangkala disjunction dipahami minangka maksimum 0 lan 1, lan ing kasus iki, yen paling ora siji operan padha karo 1 ( bener ), kita entuk persis bener . OR tabel bebener, uga dikenal minangka asil saka operator |:
a b a | b
bener bener bener
bener palsu bener
palsu bener bener
palsu palsu palsu
Logis OR, uga dikenal minangka disjunction, contone:
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);

   }
}
asil:

false
true
true
true
Yen kita nggunakake operator UTAWA kondisional - ||tinimbang |, kita bakal entuk asil sing padha, nanging, kaya ing kasus kondisional AND &&, bakal tumindak kanthi ekonomi: yen kita "mlaku menyang" operan pisanan padha karo true , nilai saka operan kapindho ora dicenthang, nanging langsung asil bener .

XOR Java - logis eksklusif OR - operator ^

XOR, tambahan modulo 2, XOR logis, subtraction logis, disjunction ketat, bitwise nglengkapi ... operator ^wis akeh jeneng ing aljabar Boolean. Asil nglamar operator iki kanggo loro operand bakal bener yen operan beda lan palsu yen operand padha. Mula, trep kanggo mbandhingake karo nyuda nol ( salah ) lan siji ( bener ). Tabel bebener XOR, uga dikenal minangka asil saka operator ^:
Boolean a Boolean b a^b
bener bener palsu
bener palsu bener
palsu bener bener
palsu palsu palsu
Tuladha:
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);
   }
}
asil:

false
false
true
true

Prioritas operasi logis

Kaya ing matematika, operator pemrograman duwe urutan eksekusi tartamtu nalika katon ing ekspresi sing padha. Operator unary duwe kaluwihan tinimbang binar, lan perkalian (malah logis) tinimbang tambahan. Kita duwe peringkat operator logis sing luwih dhuwur ing dhaptar, luwih dhuwur prioritase:
  1. !
  2. &
  3. ^
  4. |
  5. &&
  6. ||
Ayo padha ndeleng conto. Konjungsi lan disjungsi ( &lan |) duwe precedensi beda:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println(a | b & c);
}
Yen kita kudu nerusake saka kiwa menyang tengen, yaiku, kanggo ngetrapake operator |lan banjur - &, kita bakal entuk nilai false . Nanging nyatane, yen sampeyan mbukak program iki, sampeyan bakal yakin manawa output bakal bener , amarga operator logis AND &bakal duwe prioritas sing luwih dhuwur tinimbang operator logis UTAWA |. Kanggo ngindhari kebingungan, sampeyan kudu ngelingi apa sing &tumindak kaya multiplikasi lan |apa sing tumindak kaya tambahan. Sampeyan bisa ngganti urutan prioritas. Cukup nganggo tanda kurung, kaya ing matematika sekolah. Ayo ngganti kode conto kita:
public class Solution {
   public static void main(String[] args) {
       boolean a = true, b = true, c = false;
       System.out.println((a|b)&c);
}
Apa kabar? Pisanan kita nggunakake tambahan logis ing kurung, lan banjur multiplikasi. Asil bakal palsu .

Ekspresi logis sing kompleks

Mesthi, kita bisa nggabungake ekspresi lan operator Boolean. Ayo elinga ekspresi saka wiwitan artikel:
(a | b) | (c < 100) & !(true) ^ (q == 5)
Saiki katon ora medeni. Ayo nulis program sing nampilake regane, sadurunge nemtokake nilai a, b, сlan q. Conto ngetung nilai ekspresi Boolean 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));
   }
}
Cathetan:variabel qkita jinis int, nanging q == 5iki expression Boolean, lan padha karo palsu , wiwit ndhuwur kita initialized karo qnomer 2. Padha karo variabel c. Nomer iki padha karo 25, nanging (c <100) minangka ekspresi Boolean sing padha karo bener . Asil saka program iki:

true
Ekspresi Boolean sing kompleks bisa digunakake kanggo nguji kahanan sing rumit lan cabang, nanging ora bisa digunakake kanthi berlebihan: nggawe kode kasebut angel diwaca.

Operator bitwise (bitwise).

Ing wiwitan artikel, kita kasebut sing operator &, |lan ^bisa digunakake ing hubungan kanggo jinis integer Jawa. Ing kasus iki, operator bitwise. Iki uga diarani bitwise, amarga siji digit minangka bit, lan operasi kasebut bisa digunakake kanthi khusus karo bit. Mesthine, dheweke kerjane rada beda karo operator logis, lan kanggo ngerti persis carane, sampeyan kudu ngerti apa sistem nomer binar. Yen sampeyan ora ngerti apa-apa utawa wis lali, disaranake sampeyan maca artikel Jawa dhisik: bit lan bita , lan ngelingake wong liya yen ing sistem nomer biner mung ana rong digit - 0 lan 1, lan kabeh data. ing komputer dituduhake sabenere karo nggunakake zeros kondisional lan siji. Sembarang angka sing biasa kita gunakake (desimal; kanggo wong-wong mau ana 10 digit beda saka 0 nganti 9, sing kita nulis nomer apa wae) bisa diwakili ing sistem nomer binar. Sampeyan bisa ngowahi nomer desimal menyang binar nggunakake divisi urut-urutan menyang kolom nggunakake basis sistem nomer (2). Sisa divisi ing saben langkah, ditulis ing urutan mbalikke, bakal menehi kita nomer binar dikarepake. Ing kene, contone, konversi angka desimal 103 dadi perwakilan biner: Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 3

Sistem bilangan biner ing kursus JavaRush

Ing kursus JavaRush, dheweke ngomong babagan sistem angka biner nalika sinau pencarian MultiThreading (level 10, kuliah 1); sawise kuliah ana sawetara tugas kanggo konsolidasi. Nanging, topik iki ora angel, lan sanajan sampeyan durung entuk dalan sing adoh, sampeyan bakal ngerti.

Saliyane &, |lan ^Jawa uga nggunakake operator bitwise:
  • ~ operator negasi bitwise
  • >>bitwise shift tengen
  • >>>unsigned bitwise shift tengen
  • <<bitwise shift ngiwa
Kanggo pamula, operator bitwise katon banget bingung lan gawean. Paling asring ora ngerti apa sing dibutuhake, kajaba kanggo ngrampungake masalah pendidikan. Nyatane, bisa digunakake paling ora kanggo ngatur divisi lan perkalian sing efisien, lan profesional digunakake kanggo enkoding / dekoding, enkripsi, lan ngasilake nomer acak.

Operator bitwise &, | lan ^

Ayo goleki conto babagan cara kerja operator kasebut. Ayo kita duwe rong integer:
int a = 25;
int b = 112; 
Kita kudu ngetrapake telung operasi kasebut &, |lan ^nampilake asil ing layar. Punika kode 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);

   }
}
Asil saka program kaya ing ngisor iki:

a & b = 16
a | b = 121
a ^ b = 105
Yen sampeyan ora ngerti apa sing kedadeyan, asile katon banget misterius. Nyatane, kabeh luwih gampang tinimbang sing katon. Operator bitwise "ndeleng" nomer operan ing wangun binar. Banjur padha aplikasi operator logis &, |utawa ^kanggo digit cocog (bit) saka nomer loro. Dadi, kanggo &bit pungkasan saka perwakilan biner saka nomer 25 logis nambah nganti bit pungkasan saka perwakilan biner saka nomer 112, bit penultimate karo penultimate siji, lan ing: Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 4Logika padha bisa dilacak ing kasus |lan ^. Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 5

Bit shift ngiwa utawa nengen

Ana sawetara operator bit shift ing Jawa. Operator sing paling umum digunakake <<yaiku lan >>. Padha mindhah perwakilan binar nomer ing ngiwa utawa nengen, mungguh, lan ing cilik saka shift menyang tengen, nalika ngreksa tandha (kita bakal nerangake apa ngreksa tandha tegese ing ngisor iki). Ana operator shift tengen liyane >>>. Iku nindakake bab sing padha nanging >>ora nyimpen tandha. Dadi, ayo deleng karyane nggunakake conto. int a = 13 a << 1nggeser kabeh bit saka perwakilan binar angka a menyang kiwa kanthi 1 bit. Kanggo nyederhanakake, ayo bayangake angka 13 ing biner minangka 0000 1101. Nyatane, angka iki katon kaya iki: 00000000 00000000 00000000 00001101, amarga Jawa intnyedhiyakake 4 bita utawa 32 bit kanggo angka. Nanging, iki ora muter peran ing conto, supaya ing conto iki kita bakal nimbang nomer kita dadi siji-bait. Operasi logika ing Jawa.  Operasi bitwise ing Jawa - 6Bit kosong ing sisih tengen diisi karo nol. Minangka asil saka operasi iki, kita njaluk nomer 26. a << 2Ngalih kabeh bit saka perwakilan binar nomer amenyang kiwa dening 2 bit, lan loro bit kosong ing sisih tengen kapenuhan zeros. Akibaté, kita bakal entuk nomer 52. a << 3Asil bakal dadi 104 ... Gatekna pola? Bitwise shifting akiwa dening n posisi dianggo kaya multiplying nomer adening 2 kanggo daya saka n. Padha ditrapake kanggo nomer negatif. Iki -13 << 3bakal menehi asil -104. a >> nnggeser perwakilan binar saka nomer n posisi menyang tengen. Contone, 13 >> 1 Ngowahi nomer 1101 dadi nomer 0110, yaiku, 6. Lan 13 >> 2asil bakal dadi 3. Inggih, ing intine, ing kene kita dibagi nomer kanthi 2 dadi kekuwatan n, ing ngendi n minangka nomer shift. sisih tengen, nanging karo siji caveat: yen nomer iku aneh, sak operasi iki kita koyone ngreset dicokot pungkasan saka nomer. Nanging karo sing negatif, kahanan rada beda. Ayo, coba priksa apa sing bakal diasilake program kasebut yen sampeyan njaluk supaya nindakake operasi -13 >> 1. Sampeyan bakal weruh nomer -7, ora -6, minangka sampeyan bisa mikir. Iki kedadeyan amarga cara angka negatif disimpen ing Jawa lan basa pamrograman liyane. Padha disimpen ing apa sing diarani kode pelengkap. Ing kasus iki, digit paling penting (sing ana ing sisih kiwa) diwenehi tandha. Ing kasus nomer negatif, angka sing paling penting yaiku 1.

Kode tambahan

Ayo dipikirake nomer kasebut int a = 13. Yen ing program sampeyan nyithak perwakilan binar menyang console nggunakake printah System.out.println(Integer.toBinaryString(a));, banjur kita bakal entuk 1101. Nyatane, iki minangka notasi shorthand, amarga nomer jinis intnjupuk 4 bait ing memori, supaya komputer "ndeleng" luwih. kaya iki:

00000000 00000000 00000000 00001101
Angka sing paling penting yaiku nol, tegese kita duwe nomer positif. Kanggo nerjemahake menyang kode tambahan:
  1. Kita nulis nomer -13 ing sing disebut "kode langsung". Kanggo nindakake iki, ganti angka sing paling penting dadi 1.
    Asil tumindak:

    
    10000000 0000000 0000000 00001101
  2. Sabanjure, kita ngowahi kabeh bit (kita ngganti 0 dadi 1, lan 1 dadi 0) kajaba bit tandha. Nyatane, kita wis ngganti.
    Hasil tindakan:

    
    11111111 11111111 11111111 11110010

    (ya, langkah 1 lan 2 bisa digabung, nanging luwih becik mikir kaya ngono)

  3. Tambah 1 menyang nomer asil.
    Asil saka tumindak:

    
    11111111 11111111 11111111 11110011
Nomer binar sing diasilake yaiku -13, ditulis ing kode pelengkap loro, lan shift bit (lan operasi liyane) bakal ditrapake khusus. Mung prabédan ing logika operasi ora katon ing kabeh operasi. Contone, kanggo owah-owahan sing padha ing sisih kiwa, bedane ora katon; kita bisa nggarap angka negatif kanthi cara sing padha karo nomer positif. Saiki ayo ngalih nengen -13 >> 1. Wiwit operator kita >>njaga tandha, ing operasi iki kabeh bit sing dibebasake ing sisih kiwa diisi ora karo nol, nanging karo siji. Mangkono, ngganti nomer

11111111 11111111 11111111 11110011
siji bit ing sisih tengen, ngasilake urutan bit ing ngisor iki:

11111111 11111111 11111111 11111001
Yen kita ngowahi nomer iki menyang kode langsung (yaiku, pisanan nyuda 1, banjur walik kabeh bit kajaba sing pisanan) kita entuk nomer kasebut:

10000000 00000000 00000000 00000111
utawa -7. Saiki kita wis ngerti operator shift tengen sing njaga tandha, bakal dadi jelas kepiye bedane karo operator >>>. a >>> n- operasi iki minangka shift unsigned, sing, iku shifts perwakilan binar saka nomer amenyang tengen dening n bit, nanging ngisi n bit kosong ing sisih kiwa ora karo siji, kaya operator >>, nanging karo nul. Ayo padha nindakake operasi -13 >>> 1. Kita wis duwe nomer -13ing rong pelengkap:

11111111 11111111 11111111 11110011
Kanthi ngalih menyang tengen kanthi 1 bit lan ngisi bit gratis kanthi nol, kita entuk nomer ing ngisor iki:

01111111 11111111 11111111 11111001
Apa sing menehi nomer ing notasi desimal 2147483641.

Operator negasi bitwise ~

Operator unary iki kerjane gampang banget: mbalikke saben bit saka perwakilan biner saka integer. Ayo njupuk nomer -13:

11111111 11111111 11111111 11110011
Operasi negasi bitwise ~13mung bakal mbalikke nilai saben bit. Akibaté, kita entuk:

00000000 00000000 00000000 00001100
Utawa 12ing wangun desimal.

kesimpulan Brief

  • Kabeh operator logis ditrapake kanggo ekspresi Boolean, yaiku, sing bisa diarani bener utawa salah .
  • Если операторы &, | or ^ применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения or вычитания.
  • В математической логике операторам & и | соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция ~a.
  • Для логического отрицания булевского выражения a используется операция !a.
  • Отрицательные числа хранятся и обрабатываются в дополнительном codeе.
  • Поразрядный сдвиг вправо может сохранять знак (>>), а может — не сохранять (>>>).
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION