JavaRush /Blog Java /Random-MS /Java: bit dan bait

Java: bit dan bait

Diterbitkan dalam kumpulan
Java: bit dan bait - 1

pengenalan

Jika orang mengira dalam sistem nombor perpuluhan, maka komputer mengira dalam sistem binari. Dan seorang pengaturcara mesti memahami cara bercakap dengan kedua-dua orang dan komputer. Kajian semula ini sepatutnya membantu dalam perkara ini. Kadang-kadang terdapat seluruh dunia yang tersembunyi di sebalik yang jelas. Saya bercadang untuk bercakap tentang dunia ini. Sebagai contoh, terdapat 7 hari dalam seminggu. Sekarang, mari kita jawab soalan: Apakah nombor "7"? ) Pertama, ia ialah nombor asli integer (positif). Ia juga merupakan nombor perpuluhan. Nombor perpuluhan ialah nombor dalam Sistem Perpuluhan. Apabila kita sebut "sistem nombor perpuluhan", ia bermakna sistem nombor mempunyai asas 10 . Radix menunjukkan bilangan digit yang boleh digunakan dalam sistem nombor tertentu untuk mewakili nombor. Kira detik adalah dari sifar. Sehubungan itu, untuk mewakili nombor dalam sistem nombor perpuluhan, kita menggunakan nombor dari 0 hingga 9. Ini bagus, tetapi kita perlu mengira bukan sahaja hingga 9, tetapi juga seterusnya. Bagaimana untuk menjadi? Sebagai contoh, nombor 10. Untuk menulis nombor ini, kita menggunakan sebanyak 2 digit. Kedudukan setiap digit dalam sistem perpuluhan dipanggil tempat perpuluhan. Digit dikira dari kanan ke kiri:
Java: bit dan bait - 2
Di samping itu, nombor perpuluhan boleh dikembangkan seperti berikut: 103 = 1*10^2 + 0*10^1 + 3*10^0
Java: bit dan bait - 3
Bilangan itu pada dasarnya berkembang dari kanan ke kiri. Iaitu, pada mulanya ia adalah 7, dan kemudian ia menjadi 10. Oleh itu, digit dikira dari kanan, bermula dari sifar. Untuk apa semua ini? Ini kerana kita bukan komputer. Dan semasa kita mengira dalam perpuluhan (iaitu, asas 10), komputer mengira dalam binari (iaitu, asas 2). Tetapi peraturan yang digunakan dalam sistem nombor ini adalah sama.
Java: bit dan bait - 4

Sistem binari

Sistem binari sangat serupa dengan sistem perpuluhan, dengan satu-satunya perbezaan ialah had di sini bukan 10, tetapi 2. Mari kita bandingkan dengan contoh. Bagaimanakah kita mewakili 11 dalam binari? Ia sangat mudah: anda hanya perlu membahagikan nombor perpuluhan dengan asas 2, iaitu, mengira 11/2 dalam lajur. Contoh:
Java: bit dan bait - 5
Atau ini contoh dari WikiHow:
Java: bit dan bait - 6
Menariknya, kita boleh mewakili nombor dalam perduaan dengan cara yang sama seperti dalam perpuluhan: 111 dalam perduaan = 1*2^2 + 1*2^1 + 1*2^0 = 4 + 2 + 1
Java: bit dan bait - 7
Contoh penukaran daripada binari kepada perpuluhan boleh dilihat dalam kalkulator dalam talian . Bercakap tentang fakta bahawa peraturan operasi dalam sistem nombor adalah sama, mari kita lihat penambahan dalam sistem binari:
Java: bit dan bait - 8
Seperti yang anda lihat, kami memindahkan digit semasa penambahan dengan cara yang sama seperti dalam sistem perpuluhan. Analisis penambahan boleh dilihat, sebagai contoh, di sini: Dengan cara ini, beberapa perkataan "pelepasan" disebut secara berkala. Dan apa itu? Tempat hanyalah "elemen struktur" mewakili nombor. Iaitu, nombor 10 terdiri daripada dua digit: kita memerlukan 2 digit, 2 tempat, 2 elemen untuk menulis nombor ini. Adalah penting untuk kita memahami perkara ini kerana dalam sistem nombor binari, digit adalah sedikit . Perkataan Bit berasal daripada bahasa Inggeris "binary digit" , iaitu nombor binari. Ia boleh sama ada 0 atau 1. Tetapi sama seperti kita membaca nombor dan perkataan secara keseluruhan, dan bukan huruf demi huruf, komputer tidak membaca sedikit demi sedikit. Untuk "sekeping" minimum maklumat yang diproses dalam RAM (yang dipanggil unit maklumat terkecil yang boleh dialamatkan), urutan 8 bit dibaca . Oleh kerana terdapat 8 daripadanya, yang ini dipanggil "oktet". Dan juga - perkataan yang lebih terkenal Byte . Untuk mengingati oktet, anda boleh ingat bahawa perkataan octopus (lapan kaki) diterjemahkan ke dalam bahasa Inggeris sebagai octopus. Iaitu, di sini adalah "okto" yang sama dalam tajuk:
Java: bit dan bait - 9
Mari kita fikirkan apakah bilangan maksimum yang boleh kita wakili sebagai 8 bit?
Java: bit dan bait - 10
Dan di sini timbul persoalan: bagaimana dengan nombor negatif? Untuk memahami perkara ini, mari kita bincangkan tentang cara bait diwakili dalam Java
Java: bit dan bait - 11

Java dan Byte

Bagaimanakah kita boleh menggunakan nombor negatif di Jawa? Ia dilakukan secara ringkas. Di Jawa, bait ditandatangani. Digit/bit paling kiri (juga dipanggil "bit paling ketara") dijadikan sejenis "penanda" yang menjawab soalan: "Adakah nombor ini negatif?" Jika jawapannya ya, maka penanda mempunyai nilai 1. Jika tidak, ia adalah 0. Mari kita lihat contoh cara menukar nombor 5 menjadi nombor negatif 5:
Java: bit dan bait - 12
Berdasarkan gambar ini, anda boleh memahami had di mana nilai Byte terletak:
Java: bit dan bait - 13
Ia juga jelas bahawa:
  • jika kita menambah satu kepada 127, kita mendapat -128.
  • jika kita menolak satu daripada -128, kita mendapat 127.
Oleh itu, Byte dalam Java boleh mengambil nilai dari -128 hingga 127. Seperti yang kita ingat, bait ialah oktet. Dan digit maksimum/bit paling ketara mempunyai nombor siri 7, kerana kita mengira dari sifar. Dalam kes ini, mudah diingat bahawa bait adalah sama dengan -2 kepada kuasa 7 (had bawah) hingga 2 kepada kuasa 7 tolak 1 (had atas). Bekerja dengan jenis data itu sendiri adalah mudah. Kami menggunakan pengkompil Java dalam talian "repl.it" sebagai "kotak pasir" untuk artikel ini. https://repl.it/languages/java. Sebagai contoh, mari jalankan kod yang akan mewakili pembolehubah bait dalam bentuk binari sebagai rentetan:
class Main {
  public static void main(String[] args) {
    byte octet = 5;
    String bin = String.format("%8s", Integer.toBinaryString(octet)).replace(' ', '0');
    System.out.println(bin);
  }
}
Bekerja dengan bait digunakan secara aktif apabila bekerja dengan Strim I/O. Anda boleh membaca lebih lanjut dalam tutorial daripada Oracle: " I/O Streams ". Di samping itu, dalam Java anda boleh menggunakan literal khas untuk menentukan nilai sebagai bit:
class Main {
  public static void main(String[] args) {
    byte data = 0b101;
    System.out.println(data);
  }
}
Java: bit dan bait - 14

Manipulasi Bit

Menyentuh bait dan bit, seseorang tidak boleh gagal untuk menyebut pelbagai manipulasi bit. Mungkin operasi yang paling biasa ialah anjakan (anjakan bitwise atau anjakan bit). Dan semua kerana hasil mereka mempunyai manfaat praktikal yang jelas. Apa gunanya? Peralihan ke kiri oleh N kedudukan adalah bersamaan dengan mendarab nombor dengan 2N. Dan anjakan ke kanan adalah serupa dengan pembahagian yang sama. Oleh itu, 5<<2 == 5*Math.pow(2,2) Dan untuk memahami mengapa demikian, mari kita lihat contoh ini dengan lebih terperinci:
Java: bit dan bait - 15
Penafian bitwise NOT (Unary bitwise), yang diwakili oleh tilde, menyongsangkan bit. Ia ditulis sebagai tilde, contohnya ~5.
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
Ini sekali lagi menunjukkan bahawa apabila Java menukar tanda nombor, selain menyongsangkan nilai bit pada penghujungnya, kami melakukan +1. Dan tanpa ini, seperti yang kita lihat, nombor 5 kita berubah. Dan supaya ia kekal nombor yang sama seperti sebelum menukar tanda, anda perlu melakukan +1. Bitwise DAN membolehkan anda meninggalkan dua nombor berbeza dengan nilai 1 untuk sedikit sahaja jika semua bit mempunyai nilai satu. Apa yang menarik tentang ini mungkin ia mempunyai beberapa faedah aplikasi:
int x=4;
System.out.println((x&1) != 1);
Kod ini menyemak nombor x untuk pariti. Mari lihat contoh:
Java: bit dan bait - 16
Dengan menggunakan Bitwise AND dan Bitwise OR bersama-sama, anda boleh menggunakan topeng:
public static void main(String[] args) {
    byte optionA=0b0100;
    byte optionB=0b0010;
    byte optionC=0b0001;
    byte value = (byte)(optionB | optionC);
    // Check for optionB
    if ((optionC & value) != 0b0000) {
      System.out.println("Yes");
    } else {
      System.out.println("No");
    }
  }
Lihat " Pilihan topeng dengan operator bitwise dalam Java " untuk butiran lanjut . Manipulasi bit ialah topik yang menarik di mana ulasan, artikel dan buku berasingan telah ditulis. Dan dari sini bermula jalan panjang ke kriptografi. Sebagai sebahagian daripada ulasan ini, adalah wajar memahami mengapa ia berfungsi dan bagaimana. Untuk mendapatkan maklumat lanjut tentang operasi bit, saya syorkan membaca ulasan daripada tproger: “ Mengenai operasi bit .”

Jenis primitif

Jadi, bait ialah oktet, iaitu 8 bit. Sangat mudah untuk diingat bahawa di Jawa terdapat juga 8 jenis primitif, secara kebetulan. Jenis primitif ialah jenis data yang dibina ke dalam bahasa pengaturcaraan, iaitu, tersedia secara lalai. byte ialah jenis data primitif terkecil dari segi jejak memori yang Java boleh berfungsi. Seperti yang kami katakan sebelum ini, bait mengambil 8 bit. Oleh itu, digit yang paling ketara ialah nombor 7. Oleh itu, bait mengandungi nilai dari -2 hingga kuasa ke-7 hingga 2 hingga kuasa ke-7 tolak 1 hasilnya. Apakah jenis primitif lain yang ada:
Java: bit dan bait - 17
Seperti yang dapat kita lihat dari jadual, jenis data dari segi jumlah data yang diduduki berganda. Iaitu, pendek = 2 * bait, dan int = 2 * pendek. Ia sebenarnya mudah diingati. Ingat bahawa bait = 8 bit. Hakikat bahawa ia tidak boleh kurang juga diingati. Dalam bahasa Inggeris, integer dipanggil integer. Jenis primitif daripadanya dipanggil singkatan int. Terdapat integer biasa - int. Terdapat versi pendek, pendek, dan versi panjang, panjang. Oleh itu, int menduduki 32 bit (4 bait). Versi pendek adalah 2 kali lebih kecil - 16 bit (2 bait), dan versi panjang adalah dua kali lebih besar, i.e. 64 bit (8 bait). Jadi int paling banyak boleh menyimpan sejumlah kira-kira 2 bilion dan seratus juta. Dan panjang boleh menyimpan maksimum kira-kira 9 kuadrilion (perkataan yang bagus). Mengingati jenaka lama tentang bagaimana seorang pengaturcara baru berfikir bahawa terdapat 1000 bait dalam satu kilobait, dan seorang pengaturcara yang lengkap percaya bahawa terdapat 1024 gram dalam satu kilogram, kita boleh faham:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
Ngomong-ngomong, pembaca yang penuh perhatian mungkin menyedari bahawa terdapat hanya 7 jenis dalam gambar. 8 jenis primitif ialah boolean. boolean ialah jenis data Boolean yang hanya mempunyai dua nilai: benar dan palsu. Tetapi persoalan timbul - apakah saiznya? Spesifikasi Mesin Maya Java dan bahagian " 2.3.4. Jenis boolean " akan menjawab kami:
Java: bit dan bait - 18
Iaitu, hanya boolean akan mengambil jumlah yang sama seperti int. Jika kita mengisytiharkan tatasusunan boolean, maka setiap elemen tatasusunan akan menduduki 1 bait. Ini adalah keajaiban :)

Kesimpulan

Saya cadangkan anda membiasakan diri dengan beberapa lagi bahan untuk disatukan: #Viacheslav
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION