CodeGym /Blog Jawa /Acak /Operator Java Bitwise
John Squirrels
tingkat
San Francisco

Operator Java Bitwise

Diterbitake ing grup
Ing pawulangan dina iki, kita bakal kenal karo Operator Bitwise Java lan nimbang conto babagan cara nggarap. Sampeyan mbokmenawa menowo karo tembung "dicokot". Yen ora, ayo kelingan apa tegese :) A bit minangka unit informasi paling cilik ing komputer. Jenengé asalé saka digit biner . A dicokot bisa ditulis dening siji saka rong nomer: 1 utawa 0. Ana sistem nomer binar khusus adhedhasar siji lan nul. Kita ora bakal nyelidiki alas matematika ing kene. Kita mung bakal nyathet manawa nomer apa wae ing Jawa bisa diowahi dadi bentuk binar. Kanggo nindakake iki, sampeyan kudu nggunakake kelas pambungkus.
Operator bitwise - 1
Contone, iki carane sampeyan bisa nindakake iki kanggo int :

public class Main {

   public static void main(String[] args) {

       int x = 342;
       System.out.println(Integer.toBinaryString(x));
   }
}
Output konsol: 101010110 1010 10110 (Aku nambah spasi kanggo luwih gampang diwaca) yaiku nomer 342 ing sistem desimal. Kita wis bener ngilangi nomer iki dadi bit individu: nul lan siji. Operasi sing ditindakake ing bit diarani bitwise .
  • ~ - bitwise ora.
Operator iki prasaja banget: ngliwati saben bit nomer kita, lan ngowahi bit: nul dadi siji, lan siji dadi nul. Yen ditrapake ing nomer 342, iki kedadeyan: 101010110 yaiku 342 diwakili minangka nomer binar 010101001 minangka nilai ekspresi ~342 Ayo coba praktekake:

public class Main {

   public static void main(String[] args) {

       int x = 342;
       System.out.println(~x);
   }
}
Output konsol: 169 169 minangka asil kita ( 010101001 ) ing sistem desimal sing akrab :)
  • & - bitwise LAN
Kaya sing sampeyan ngerteni, katon meh padha karo logika AND ( && ). Operator && , sampeyan bakal kelingan, bali bener mung yen loro operand bener. Bitwise & dianggo kanthi cara sing padha: mbandhingake rong angka kanthi dicokot. Perbandhingan ngasilake nomer katelu. Contone, ayo njupuk nomer 277 lan 432: 110110000 yaiku 277 diwakili minangka nomer binar 1000101011 yaiku 432 diwakili minangka nomer binar Sabanjure, operator & mbandhingake bit pisanan saka nomer ndhuwur karo bit pisanan saka nomer ngisor. Amarga iki operator AND, asil bakal 1 mung yen loro bit 1. Ing kasus liyane, asil 0. 100010101 && operator Kaping pisanan, kita mbandhingake bit pisanan saka rong nomer, banjur bit kapindho, banjur katelu, lan ing. Nalika sampeyan bisa ndeleng, mung rong kasus loro sing cocog bit ing nomer witjaksono kanggo 1 (bit pisanan lan kaping lima). Kabeh mbandhingake liyane diprodhuksi 0s. Dadi ing pungkasan kita entuk nomer 10001000. Ing sistem desimal, cocog karo nomer 272. Ayo priksa:

public class Main {

   public static void main(String[] args) {
       System.out.println(277&432);
   }
}
Output konsol: 272
  • | - bitwise UTAWA.
Operator iki dianggo kanthi cara sing padha: mbandhingake rong angka kanthi dicokot. Mung saiki yen paling sethithik siji bit 1, banjur asile 1. Ayo padha ndeleng nomer padha (277 lan 432): 100010101 | 110110000 _______________ 110110101 - asil saka | operator Mangkene kita entuk asil sing beda: mung bit sing tetep nol yaiku bit sing nol ing loro nomer kasebut. Asil kasebut yaiku nomer 110110101. Ing sistem desimal, cocog karo nomer 437 Ayo priksa:

public class Main {

   public static void main(String[] args) {
       System.out.println(277|432);
   }
}
Output konsol: 437 Kita ngetung kabeh kanthi bener! :)
  • ^ - bitwise XOR (eksklusif OR)
Kita durung nemoni operator iki. Nanging ora ana sing rumit. Iku padha karo operator UTAWA biasa. Ana siji prabédan: biasa UTAWA bali bener yen paling siji operand bener. Nanging ora kudu siji: yen loro operan bener, asile bener. Nanging eksklusif UTAWA ngasilake bener mung yen salah siji saka operand bener. Yen loro operan bener, OR biasa ngasilake bener ("paling ora siji bener"), nanging XOR ngasilake palsu. Mulane diarani eksklusif UTAWA. Ngerti carane operator bitwise sadurunge, sampeyan bisa uga gampang ngetung 277 ^ 432. Nanging ayo digali bebarengan maneh :) 100010101 ^ 110110000 _______________ 010100101 - asil saka ^operator Iku asil kita. Bit sing padha ing nomer loro ngasilake 0 (tegese tes "mung siji" gagal). Nanging bit sing mbentuk pasangan 0-1 utawa 1-0 dadi siji. Asil kita yaiku nomer 010100101. Ing sistem desimal, cocog karo angka 165. Ayo ndeleng yen petungan kita bener:

public class Main {

   public static void main(String[] args) {
       System.out.println(277^432);
   }
}
Output konsol: 165 Super! Kabeh mung kaya sing kita pikirake :) Saiki wektune kanggo kenal karo operator shift bit. Jeneng ngandika kanggo dhewe. Kita njupuk sawetara nomer, lan mindhah bit sawijining ngiwa utawa nengen :) Ayo ndeleng carane iku katon:

Ngalih ngiwa

Pergeseran bit menyang ngiwa dituduhake dening << Iki minangka conto:

public class Main {

   public static void main(String[] args) {
       int x = 64;//value
       int y = 3;// Shift distance

       int z = (x << y);
       System.out.println(Integer.toBinaryString(x));
       System.out.println(Integer.toBinaryString(z));
   }
}
Ing conto iki, angka x = 64 diarani nilai. Iku bit nilai sing bakal kita ganti. Kita bakal mindhah bit menyang kiwa (sampeyan bisa ngira iki kanthi arah operator << ) Ing sistem binar, angka 64 = 1000000 Nomer y = 3 diarani jarak shift. Jarak shift nuduhake carane akeh bit ing sisih tengen / ngiwa sampeyan pengin ngalih bit saka nomer x Ing conto kita, kita bakal mindhah wong 3 bit ngiwa. Kanggo ndeleng proses shift luwih cetha, deleng gambar. Ing conto iki, kita nggunakake int s. Ints manggoni 32 bit ing memori komputer. Iki minangka nomer asli kita 64 katon:
Operator bitwise - 2
Lan saiki kita njupuk saben bit lan secara harfiah ngalih menyang kiwa kanthi 3 panggonan:
Operator bitwise - 3
Njupuk dipikir ing apa kita entuk. Nalika sampeyan bisa ndeleng, kabeh bit kita wis pindah, lan liyane 3 zeros wis ditambahake saka pojok kisaran. Telu, amarga kita pindah dening 3. Yen kita wis pindah dening 10, 10 nul wis ditambahake. Dadi, ekspresi x << y tegese "nggeser bit saka nomer x menyang ngiwa kanthi y panggonan". Asil ekspresi kita yaiku nomer 1000000000, yaiku 512 ing sistem desimal. Ayo priksa:

public class Main {

   public static void main(String[] args) {
       int x = 64;//value
       int y = 3;// Shift distance

       int z = (x << y);
       System.out.println(z);
   }
}
Output konsol: 512 Titik ing! Secara teoritis, bit bisa dipindhah tanpa wates, nanging amarga nomer kita minangka int , kita mung duwe 32 digit binar sing kasedhiya. Saka jumlah kasebut, 7 wis dikuwasani 64 (1000000). Mulane, yen kita ngalih 27 panggonan ngiwa, kita mung siji bakal pindhah ngluwihi sawetara jinis data lan bakal ilang. Mung nol bakal tetep!

public class Main {

   public static void main(String[] args) {
       int x = 64;//value
       int y = 26;// Shift distance

       int z = (x << y);
       System.out.println(z);
   }
}
Output konsol: 0 Kaya sing dikarepake, sing dipindhah ngluwihi 32 bit sing kasedhiya lan ilang. We rampung karo nomer 32-dicokot dumadi saka mung nul.
Operator bitwise - 4
Alami, iki cocog karo 0 ing sistem desimal. Iki minangka aturan prasaja kanggo ngelingi owah-owahan ing sisih kiwa: Kanggo saben owah-owahan ing sisih kiwa, nomer kasebut dikalikan karo 2. Coba etung ekspresi ing ngisor iki tanpa gambar bit 111111111 << 3 Kita kudu tikel nomer 111111111 kanthi 2. Akibaté, kita entuk 888888888. Ayo nulis kode lan priksa:

public class Main {

   public static void main(String[] args) {
       System.out.println(111111111 << 3);
   }
}
Output konsol: 888888888

Nggeser nengen

Operasi iki dilambangake karo >> . Iku nindakake bab sing padha, nanging ing arah liyane! :) Kita ora bakal reinvent setir. Ayo coba nganggo int 64 sing padha.

public class Main {

   public static void main(String[] args) {
       int x = 64;//value
       int y = 2;// Shift distance

       int z = (x >> y);
       System.out.println(z);
   }
}
Operator bitwise - 5
Operator bitwise - 6
Minangka asil saka shift menyang tengen dening 2, loro nul nemen ing nomer kita pindhah metu saka sawetara lan ilang. Kita entuk 10000, sing cocog karo nomer 16 ing output Console sistem desimal: 16 Punika aturan prasaja kanggo ngelingi owah-owahan ing sisih tengen: Saben shift menyang sisih tengen dibagi loro, mbuwang sisa. Contone, 35 >> 2 tegese kita kudu dibagi 35 karo 2 kaping pindho, mbuwang sisa 35/2 = 17 (bucal sisa 1) 17/2 = 8 (bucal sisa 1) Ing pungkasan, 35 >> 2 kudu padha karo 8. Coba priksa:

public class Main {

   public static void main(String[] args) {
       System.out.println(35 >> 2);
   }
}
Output konsol: 8

Precedence operator ing Jawa

Nalika nulis lan maca kode, sampeyan bakal kerep nemokake ekspresi sing nggabungake sawetara operasi. Penting banget kanggo ngerti urutan sing bakal ditindakake (yen ora, sampeyan bisa uga kaget karo asile) Amarga Jawa akeh operasi, saben wong wis diwenehi papan ing tabel khusus:

Operator Precedence

Operator kautamaan
postfix expr++ expr--
unary ++expr --expr +expr ~ !
Multiplicative * / %
aditif + -
ngalih << >> >>>
relasional < > <= >= contone
Podo == !=
bitwise AND &
bitwise eksklusif UTAWA ^
bitwise klebu UTAWA |
logika AND &&
logis UTAWA ||
terner ? :
tugas = += -= *= /= %= &= ^= |= <<= >>= >>>=
Kabeh operasi dileksanakake saka kiwa menyang tengen, njupuk precedence. Contone, yen kita nulis

int x  = 6 - 4/2;
banjur operasi divisi ( 4/2 ) bakal ditindakake luwih dhisik. Sanajan dadi nomer loro, nanging luwih dhuwur. Tanda kurung lan kurung nuduhake precedence maksimum. Sampeyan mbokmenawa elinga nalika sekolah. Contone, yen sampeyan nambahake menyang ekspresi kasebut

int x  = (6 - 4)/2;
banjur pangurangan katindakake dhisik, awit kawengku ing kurung. Precedence operator logis && rada kurang (ndeleng tabel), saengga biasane pungkasan. Tuladhane:

boolean x = 6 - 4/2 > 3 && 12*12 <= 119;
Ekspresi iki bakal dieksekusi kaya ing ngisor iki:
  • 4/2 = 2

boolean x = 6 - 2 > 3 && 12*12 <= 119;
  • 12*12 = 144

boolean x = 6 - 2 > 3 && 144 <= 119;
  • 6-2 = 4

boolean x = 4 > 3 && 144 <= 119;
Sabanjure, operator perbandingan dieksekusi:
  • 4 > 3 = bener

boolean x = true && 144 <= 119;
  • 144 <= 119 = palsu

boolean x = true && false;
Lan, pungkasane, operator AND ( && ) bakal dieksekusi pungkasan.

boolean x = true && false;
boolean x = false;
Contone, operator tambahan ( + ) nduweni precedence sing luwih dhuwur tinimbang operator pembanding != (ora padha); Mulane, ing ekspresi

boolean x = 7 != 6+1;
operasi 6 + 1 bakal dileksanakake pisanan, banjur 7! = 7 mriksa (sing ngevaluasi kanggo palsu), lan pungkasanipun assignment saka asil (palsu) kanggo variabel x (assignment umume duwe precedence paling murah kabeh operator ; ndeleng meja). Phew! Iku pawulangan gedhe, nanging sampeyan nindakake! Yen sampeyan ora ngerti kabeh babagan iki utawa pelajaran sadurunge, aja kuwatir. Kita bakal ndemek topik kasebut luwih saka sepisan ing mangsa ngarep. Saperangan pawulangan CodeGym babagan operasi logis lan numerik. Kita ora bakal entuk wektu iki, nanging ora ana salahe yen sampeyan maca saiki.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION