JavaRush /Java Blog /Random-ID /Java: bit dan byte
Viacheslav
Level 3

Java: bit dan byte

Dipublikasikan di grup Random-ID
Java: bit dan byte - 1

Perkenalan

Jika orang menghitung dalam sistem bilangan desimal, maka komputer menghitung dalam sistem biner. Dan seorang programmer harus memahami cara berbicara dengan manusia dan komputer. Ulasan ini akan membantu dalam hal ini. Terkadang ada dunia yang tersembunyi di balik hal yang sudah jelas. Saya mengusulkan untuk berbicara tentang dunia ini. Misalnya ada 7 hari dalam seminggu. Sekarang, mari kita jawab pertanyaan: Berapakah angka “7”? ) Pertama, bilangan asli bilangan bulat (positif). Ini juga merupakan angka desimal. Bilangan desimal adalah bilangan dalam Sistem Desimal. Yang dimaksud dengan "sistem bilangan desimal" adalah sistem bilangan tersebut mempunyai basis 10 . Radix menunjukkan berapa banyak digit yang dapat digunakan dalam sistem bilangan tertentu untuk mewakili suatu bilangan. Hitung mundur dimulai dari nol. Oleh karena itu, untuk menyatakan bilangan dalam sistem bilangan desimal, kita menggunakan bilangan dari 0 sampai 9. Ini bagus, tetapi kita perlu menghitung tidak hanya sampai 9, tetapi juga lebih dari itu. Bagaimana menjadi? Misalnya angka 10. Untuk penulisan angka ini kita menggunakan sebanyak 2 digit. Posisi setiap angka dalam sistem desimal disebut tempat desimal. Digitnya dihitung dari kanan ke kiri:
Java: bit dan byte - 2
Selain itu, bilangan desimal dapat diperluas sebagai berikut: 103 = 1*10^2 + 0*10^1 + 3*10^0
Java: bit dan byte - 3
Jumlahnya pada dasarnya bertambah dari kanan ke kiri. Artinya, mula-mula 7, lalu menjadi 10. Oleh karena itu, angka-angka tersebut dihitung dari kanan, dimulai dari nol. Untuk apa semua ini? Ini karena kita bukan komputer. Dan meskipun kita menghitung dalam desimal (yaitu basis 10), komputer menghitung dalam biner (yaitu basis 2). Namun aturan yang berlaku dalam sistem bilangan tersebut sama.
Java: bit dan byte - 4

Sistem biner

Sistem biner sangat mirip dengan sistem desimal, perbedaannya hanya limitnya di sini bukan 10, melainkan 2. Mari kita bandingkan dengan sebuah contoh. Bagaimana kita merepresentasikan 11 dalam biner? Caranya sangat sederhana: Anda hanya perlu membagi bilangan desimal dengan basis 2, yaitu menghitung 11/2 dalam satu kolom. Contoh:
Java: bit dan byte - 5
Atau inilah contoh dari WikiHow:
Java: bit dan byte - 6
Menariknya, kita dapat merepresentasikan suatu bilangan dalam biner dengan cara yang sama seperti dalam desimal: 111 dalam biner = 1*2^2 + 1*2^1 + 1*2^0 = 4 + 2 + 1
Java: bit dan byte - 7
Contoh konversi biner ke desimal dapat dilihat pada kalkulator online . Berbicara tentang fakta bahwa aturan operasi dalam sistem bilangan adalah sama, mari kita lihat penjumlahan dalam sistem biner:
Java: bit dan byte - 8
Seperti yang Anda lihat, kami mentransfer angka selama penjumlahan dengan cara yang sama seperti dalam sistem desimal. Analisis penjumlahan dapat dilihat misalnya di sini: Ngomong-ngomong, beberapa kata “debit” disebutkan secara berkala. Dan apa ini? Tempat hanyalah “elemen struktural” yang mewakili suatu angka. Artinya, angka 10 terdiri dari dua angka: kita membutuhkan 2 angka, 2 tempat, 2 elemen untuk menuliskan angka tersebut. Penting bagi kita untuk memahami hal ini karena dalam sistem bilangan biner, satu digit adalah bit . Kata Bit berasal dari bahasa Inggris "binary digit" , yaitu bilangan biner. Bisa berupa 0 atau 1. Namun sama seperti kita membaca angka dan kata secara keseluruhan, dan bukan huruf demi huruf, komputer tidak membaca sedikit demi sedikit. Untuk “sepotong” minimum informasi yang diproses dalam RAM (yang disebut unit informasi terkecil yang dapat dialamatkan), urutan 8 bit dibaca . Karena jumlahnya 8, maka yang ini disebut "oktet". Dan juga - kata yang lebih terkenal Byte . Untuk mengingat oktet, Anda dapat mengingat bahwa kata octopus (delapan kaki) diterjemahkan ke dalam bahasa Inggris sebagai gurita. Yaitu, inilah “octo” yang sama persis dalam judulnya:
Java: bit dan byte - 9
Mari kita pikirkan berapa jumlah maksimum yang dapat kita wakili sebagai 8 bit?
Java: bit dan byte - 10
Dan di sini muncul pertanyaan: bagaimana dengan bilangan negatif? Untuk memahami hal ini, mari kita bicara tentang bagaimana byte direpresentasikan di Java
Java: bit dan byte - 11

Java dan Byte

Bagaimana caranya agar kita bisa menggunakan angka negatif di Java? Ini dilakukan dengan sederhana. Di Java, byte ditandatangani. Digit/bit paling kiri (disebut juga “bit paling signifikan”) dijadikan semacam “penanda” yang menjawab pertanyaan: “Apakah angka ini negatif?” Jika jawabannya ya, maka penandanya bernilai 1. Jika tidak, bernilai 0. Mari kita lihat contoh cara mengubah angka 5 menjadi angka negatif 5:
Java: bit dan byte - 12
Berdasarkan gambar ini, Anda dapat memahami batasan nilai Byte:
Java: bit dan byte - 13
Juga jelas bahwa:
  • jika kita menambahkan satu ke 127, kita mendapatkan -128.
  • jika kita kurangi satu dari -128, kita mendapat 127.
Jadi, Byte di Java dapat mengambil nilai dari -128 hingga 127. Seperti yang kita ingat, byte adalah oktet. Dan digit maksimum/bit paling signifikan mempunyai nomor urut 7, karena kita menghitung dari nol. Dalam hal ini, mudah untuk mengingat bahwa satu byte sama dengan -2 pangkat 7 (batas bawah) hingga 2 pangkat 7 dikurangi 1 (batas atas). Bekerja dengan tipe data itu sendiri sederhana. Kami menggunakan kompiler Java online “repl.it” sebagai “kotak pasir” untuk artikel ini. https://repl.it/linguals/java. Sebagai contoh, mari kita jalankan kode yang akan mewakili variabel byte dalam bentuk biner sebagai string:
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 byte secara aktif digunakan saat bekerja dengan I/O Streams. Anda dapat membaca lebih lanjut di tutorial dari Oracle: " I/O Streams ". Selain itu, di Java Anda dapat menggunakan literal khusus untuk menentukan nilai sebagai bit:
class Main {
  public static void main(String[] args) {
    byte data = 0b101;
    System.out.println(data);
  }
}
Java: bit dan byte - 14

Manipulasi Bit

Menyentuh byte dan bit, tidak ada salahnya untuk menyebutkan berbagai manipulasi bit. Mungkin operasi yang paling umum adalah pergeseran (pergeseran bitwise atau pergeseran bit). Dan semua itu karena hasilnya memiliki manfaat praktis yang jelas. Apa gunanya? Menggeser ke kiri sebanyak N posisi sama dengan mengalikan angka tersebut dengan 2N. Dan pergeseran ke kanan mirip dengan pembagian yang sama.Jadi, 5<<2 == 5*Math.pow(2,2) Dan untuk memahami mengapa demikian, mari kita lihat contoh ini lebih detail:
Java: bit dan byte - 15
Negasi bitwise NOT (Unary bitwise), yang diwakili oleh tanda gelombang, membalikkan bit. Ditulis dalam bentuk tilde, misalnya ~5.
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
Ini sekali lagi menunjukkan bahwa ketika Java mengubah tanda suatu angka, selain membalik nilai bit di bagian paling akhir, kami melakukan +1. Dan tanpa ini, seperti yang bisa kita lihat, nomor 5 kita berubah. Dan agar angkanya tetap sama seperti sebelum mengganti tanda, Anda perlu melakukan +1. Bitwise AND memungkinkan Anda menyisakan dua angka berbeda dengan nilai 1 untuk satu bit hanya jika semua bit bernilai satu. Yang menarik dari ini mungkin ada beberapa manfaat penerapannya:
int x=4;
System.out.println((x&1) != 1);
Kode ini memeriksa nomor x untuk paritas. Mari kita lihat sebuah contoh:
Java: bit dan byte - 16
Dengan menggunakan Bitwise AND dan Bitwise OR secara bersamaan, Anda dapat menggunakan masker:
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 " Opsi masking dengan operator bitwise di Java " untuk rincian lebih lanjut . Manipulasi bit adalah topik menarik yang telah ditulis ulasan, artikel, dan buku terpisah. Dan dari sinilah dimulailah jalan panjang menuju kriptografi. Sebagai bagian dari ulasan ini, ada baiknya memahami mengapa ini berhasil dan bagaimana caranya. Untuk informasi lebih lanjut tentang operasi bit, saya sarankan membaca ulasan dari tproger: “ Tentang operasi bit .”

Tipe primitif

Jadi, satu byte adalah oktet, yaitu 8 bit. Mudah diingat bahwa di Java juga ada 8 tipe primitif, secara kebetulan. Tipe primitif adalah tipe data yang dibangun ke dalam bahasa pemrograman, tersedia secara default. byte adalah tipe data primitif terkecil dalam hal jejak memori yang dapat digunakan oleh Java. Seperti yang kami katakan sebelumnya, satu byte membutuhkan 8 bit. Oleh karena itu, angka yang paling penting adalah angka 7. Oleh karena itu, byte berisi nilai dari -2 pangkat 7 hingga 2 pangkat 7 dikurangi 1 hasilnya. Tipe primitif apa lagi yang ada:
Java: bit dan byte - 17
Seperti yang dapat kita lihat dari tabel, tipe data dalam hal jumlah data yang ditempati berlipat ganda. Artinya, short = 2*byte, dan int = 2*short. Sebenarnya mudah untuk diingat. Ingat bahwa byte = 8 bit. Fakta bahwa jumlahnya tidak bisa kurang juga diingat. Dalam bahasa Inggris bilangan bulat disebut integer. Tipe primitif darinya disebut singkatan int. Ada bilangan bulat biasa - int. Ada versi pendek, pendek, dan versi panjang, panjang. Oleh karena itu, int menempati 32 bit (4 byte). Versi pendeknya 2 kali lebih kecil - 16 bit (2 byte), dan versi panjangnya dua kali lebih besar, mis. 64 bit (8 byte). Jadi int paling banyak bisa menyimpan sejumlah sekitar 2 miliar seratus juta. Dan panjangnya bisa menyimpan maksimal sekitar 9 kuadriliun (kata yang bagus). Mengingat lelucon lama tentang bagaimana seorang programmer pemula berpikir bahwa ada 1000 byte dalam satu kilobyte, dan seorang programmer yang lengkap percaya bahwa ada 1024 gram dalam satu kilogram, kita dapat memahami:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
Omong-omong, pembaca yang penuh perhatian mungkin memperhatikan bahwa hanya ada 7 jenis dalam gambar. 8 tipe primitif adalah boolean. boolean adalah tipe data Boolean yang hanya memiliki dua nilai: benar dan salah. Namun muncul pertanyaan - berapa ukurannya? Spesifikasi Mesin Virtual Java dan bagian " 2.3.4. Tipe boolean " akan menjawab kita:
Java: bit dan byte - 18
Artinya, boolean saja akan mengambil jumlah yang sama dengan int. Jika kita mendeklarasikan sebuah array boolean, maka setiap elemen array akan menempati 1 byte. Ini adalah keajaiban :)

Kesimpulan

Saya sarankan Anda membiasakan diri dengan beberapa materi lagi untuk dikonsolidasikan: #Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION