JavaRush /Java blogi /Random-UZ /Java: bitlar va baytlar
Viacheslav
Daraja

Java: bitlar va baytlar

Guruhda nashr etilgan
Java: bit va baytlar - 1

Kirish

Agar odamlar o'nlik sanoq tizimida hisoblasa, kompyuterlar ikkilik tizimda sanaydi. Dasturchi ham odamlar, ham kompyuterlar bilan qanday gaplashishni tushunishi kerak. Ushbu ko'rib chiqish bu masalada yordam berishi kerak. Ba'zan aniq narsaning orqasida butun dunyo yashiringan. Men bu dunyo haqida gapirishni taklif qilaman. Masalan, haftada 7 kun bor. Keling, savolga javob beraylik: "7" raqami nima? ) Birinchidan, bu butun (musbat) natural son. Bu, shuningdek, o'nlik sondir. O'nlik son - o'nlik tizimdagi son. “O‘nlik sanoq sistemasi” deganda sanoq sistemasi 10 dan iborat asosga ega ekanligini bildiradi . Radiks sonni ifodalash uchun berilgan sanoq sistemasida qancha raqamdan foydalanish mumkinligini ko'rsatadi. Ortga hisoblash noldan boshlanadi. Shunga ko'ra, o'nlik sanoq sistemasida raqamlarni ifodalash uchun biz 0 dan 9 gacha raqamlardan foydalanamiz. Bu yaxshi, lekin biz nafaqat 9 ga, balki undan keyin ham hisoblashimiz kerak. Qanday bo'lish kerak? Masalan, 10 raqami. Bu raqamni yozish uchun biz 2 ta raqamdan foydalanamiz. Har bir raqamning o'nlik kasr tizimidagi o'rni kasr deyiladi. Raqamlar o'ngdan chapga sanaladi:
Java: bit va baytlar - 2
Bundan tashqari, kasr sonini quyidagicha kengaytirish mumkin: 103 = 1*10^2 + 0*10^1 + 3*10^0
Java: bit va baytlar - 3
Raqam asosan o'ngdan chapga o'sadi. Ya'ni dastlab 7 bo'ldi, keyin esa 10 ga aylandi. Shuning uchun raqamlar noldan boshlab o'ngdan sanaladi. Bularning barchasi nima uchun? Buning sababi, biz kompyuter emasmiz. Va biz o'nlik (ya'ni, 10 ta baza) hisoblaganimizda, kompyuterlar ikkilik (ya'ni, 2 ta baza) hisoblanadi. Lekin bu sanoq sistemalarida amal qiladigan qoidalar bir xil.
Java: bit va baytlar - 4

Ikkilik tizim

Ikkilik sistema oʻnlik sanoq sistemasiga juda oʻxshaydi, birgina farqi bu yerda chegara 10 emas, balki 2. Misol bilan solishtiramiz. Ikkilik tizimda 11 ni qanday ifodalaymiz? Bu juda oddiy: siz shunchaki o'nlik sonni 2 ta asosga bo'lishingiz kerak, ya'ni ustunda 11/2 ni hisoblashingiz kerak. Misol:
Java: bit va baytlar - 5
Yoki WikiHow’dan bir misol:
Java: bit va baytlar - 6
Qizig'i shundaki, biz sonni o'nlik sanoqda bo'lgani kabi ikkilik tizimda ham ifodalashimiz mumkin: binarda 111 = 1*2^2 + 1*2^1 + 1*2^0 = 4 + 2 + 1
Java: bit va baytlar - 7
Ikkilikdan o'nlikka o'tkazish misolini onlayn kalkulyatorda ko'rish mumkin . Sanoq sistemalarida ishlash qoidalari bir xil ekanligi haqida gapirar ekanmiz, ikkilik sistemada qo`shishni ko`rib chiqamiz:
Java: bit va baytlar - 8
Ko'rib turganingizdek, biz qo'shish paytida raqamlarni o'nlik tizimdagi kabi o'tkazamiz. Qo'shish tahlilini, masalan, bu erda ko'rish mumkin: Aytgancha, vaqti-vaqti bilan "bo'shatish" so'zi aytiladi. Va u nima? Joy faqat raqamni ifodalashning "tarkibiy elementi" dir. Ya'ni, 10 raqami ikkita raqamdan iborat: bu raqamni yozish uchun bizga 2 ta raqam, 2 ta joy, 2 ta element kerak. Buni tushunish biz uchun juda muhim, chunki ikkilik sanoq sistemasida raqam bit . Bit so'zi inglizcha "binary digit" dan keladi , ya'ni ikkilik raqam. Bu 0 yoki 1 bo'lishi mumkin. Lekin biz raqamlar va so'zlarni harfma-harf emas, balki butun holda o'qiganimizdek, kompyuterlar ham bir vaqtning o'zida bit o'qimaydi. RAMdagi qayta ishlangan ma'lumotlarning minimal "bo'lagi" uchun (eng kichik manzilli ma'lumot birligi deb ataladi) 8 bitlik ketma-ketlik o'qiladi . Ularning 8 tasi bo'lganligi sababli, bu "okteta" deb ataladi. Va shuningdek - ko'proq mashhur so'z Bayt . Oktetani eslab qolish uchun siz ahtapot (sakkiz oyoq) so'zining ingliz tiliga ahtapot deb tarjima qilinganini eslashingiz mumkin. Ya'ni, sarlavhada aynan bir xil "okto" mavjud:
Java: bit va baytlar - 9
Keling, 8 bit sifatida ko'rsatishimiz mumkin bo'lgan maksimal sonni o'ylab ko'raylik?
Java: bit va baytlar - 10
Va bu erda savol tug'iladi: salbiy raqamlar haqida nima deyish mumkin? Buni tushunish uchun Java-da baytlar qanday ifodalanishi haqida gapiraylik
Java: bit va baytlar - 11

Java va bayt

Qanday qilib biz Java-da manfiy raqamlardan foydalanishimiz mumkin? Bu oddiygina qilingan. Java-da baytlar imzolanadi. Eng chap raqam/bit (shuningdek, "eng muhim bit" deb ataladi) "bu raqam manfiymi?" Degan savolga javob beradigan "marker" ga aylanadi. Agar javob ha bo'lsa, marker 1 qiymatiga ega. Aks holda, u 0 ga teng. Keling, 5 raqamini manfiy raqam 5 ga aylantirish misolini ko'rib chiqaylik:
Java: bit va baytlar - 12
Ushbu rasmga asoslanib, siz bayt qiymatining chegaralarini tushunishingiz mumkin:
Java: bit va baytlar - 13
Bundan tashqari, aniq:
  • 127 ga bitta qo'shsak, -128 ni olamiz.
  • -128 dan bittani ayirib olsak, 127 ni olamiz.
Shunday qilib, Java tilidagi bayt -128 dan 127 gacha qiymat olishi mumkin. Esda tutganimizdek, bayt oktetdir. Va maksimal raqam/eng muhim bit 7 seriya raqamiga ega, chunki biz noldan hisoblaymiz. Bunday holda, bayt 7 ning kuchiga -2 ga (pastki chegara) 2 ga 7 minus 1 (yuqori chegara) kuchiga teng ekanligini eslash oson. Ma'lumotlar turi bilan ishlashning o'zi oddiy. Biz ushbu maqola uchun “sandbox” sifatida “repl.it” onlayn Java kompilyatoridan foydalanamiz. https://repl.it/languages/java. Masalan, bayt o'zgaruvchisini ikkilik shaklda ifodalovchi kodni satr sifatida ishga tushiramiz:
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);
  }
}
I/U oqimlari bilan ishlashda baytlar bilan ishlash faol ishlatiladi. Batafsilroq Oracle qoʻllanmasida oʻqishingiz mumkin: “ I/O Streams ”. Bundan tashqari, Java-da siz qiymatni bit sifatida belgilash uchun maxsus literaldan foydalanishingiz mumkin:
class Main {
  public static void main(String[] args) {
    byte data = 0b101;
    System.out.println(data);
  }
}
Java: bit va baytlar - 14

Bit manipulyatsiyasi

Baytlar va bitlarga to'xtalib, turli bit manipulyatsiyalarini eslatib o'tmaslik mumkin emas. Ehtimol, eng keng tarqalgan operatsiya - bu siljishlar (bit bo'yicha siljish yoki bit-shift). Va barchasi, chunki ularning natijasi aniq amaliy foyda keltiradi. Nima foydasi bor? Chapga N pozitsiyaga siljish raqamni 2N ga ko'paytirishga teng. Va o'ngga siljish xuddi shu bo'linishga o'xshaydi.Shunday qilib, 5<<2 == 5*Math.pow(2,2) Va nima uchun bunday bo'lganini tushunish uchun ushbu misolni batafsil ko'rib chiqamiz:
Java: bit va baytlar - 15
Tilda bilan ifodalangan NO (Bit bo'yicha birlik) inkori bitlarni invertatsiya qiladi. U tilda sifatida yoziladi, masalan ~5.
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
Bu yana bir bor shuni ko'rsatadiki, Java raqamning belgisini o'zgartirganda, bit qiymatlarini eng oxirida o'zgartirishdan tashqari, biz +1 ni bajaramiz. Va busiz, biz ko'rib turganimizdek, bizning 5 raqamimiz o'zgaradi. Va belgini o'zgartirishdan oldingi raqam bo'lib qolishi uchun siz +1 qilishingiz kerak. Bit yo‘nalishi bo‘yicha AND barcha bitlar bitta qiymatga ega bo‘lsagina, 1 qiymatiga ega bo‘lgan ikki xil raqamni bir oz vaqtga qoldirish imkonini beradi. Buning qiziq tomoni shundaki, u ilovaning ba'zi afzalliklariga ega:
int x=4;
System.out.println((x&1) != 1);
Bu kod x raqamini paritet uchun tekshiradi. Keling, bir misolni ko'rib chiqaylik:
Java: bit va baytlar - 16
Bitwise AND va Bitwise OR dan birgalikda foydalanish orqali siz niqoblardan foydalanishingiz mumkin:
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");
    }
  }
Batafsil ma'lumot uchun " Java'da bitli operatorlar bilan niqoblash imkoniyatlari " ga qarang. Bit manipulyatsiyasi - bu alohida sharhlar, maqolalar va kitoblar yozilgan qiziqarli mavzu. Va bu erdan kriptografiyaga uzoq yo'l boshlanadi. Ushbu sharhning bir qismi sifatida u nima uchun va qanday ishlashini tushunishga arziydi. Bit operatsiyalari haqida ko'proq ma'lumot olish uchun men tproger sharhini o'qishni tavsiya qilaman: " Bit operatsiyalari haqida ."

Ibtidoiy turlar

Demak, bayt oktet, ya'ni 8 bitdir. Java-da tasodifan 8 ta ibtidoiy tur mavjudligini eslash oson. Primitiv tip - bu dasturlash tiliga o'rnatilgan, ya'ni sukut bo'yicha mavjud bo'lgan ma'lumotlar turi. bayt Java bilan ishlashi mumkin bo'lgan xotira maydoni bo'yicha eng kichik ibtidoiy ma'lumotlar turidir. Yuqorida aytganimizdek, bir bayt 8 bitni egallaydi. Shuning uchun, eng muhim raqam 7 raqamidir. Shuning uchun baytda -2 dan 7 darajagacha bo'lgan 2 dan 7 gacha bo'lgan natijaning minus 1 qiymatlari mavjud. Yana qanday ibtidoiy turlari mavjud:
Java: bit va baytlar - 17
Jadvaldan ko'rinib turibdiki, egallagan ma'lumotlar miqdori bo'yicha ma'lumotlar turlari ikki barobar ortadi. Ya'ni, qisqa = 2 * bayt va int = 2 * qisqa. Buni eslab qolish aslida oson. Bayt = 8 bit ekanligini unutmang. Bundan kam bo'lishi mumkin emasligi ham esga olinadi. Ingliz tilida butun son butun son deb ataladi. Undan ibtidoiy tur int qisqartmasi deb ataldi. Muntazam butun son mavjud - int. Qisqa varianti bor, qisqa va uzoq versiyasi, uzun. Shunga ko'ra, int 32 bitni (4 bayt) egallaydi. Qisqa versiya 2 barobar kichikroq - 16 bit (2 bayt), uzoq versiya esa ikki barobar katta, ya'ni. 64 bit (8 bayt). Shunday qilib, int ko'pi bilan taxminan 2 milliard va yuz million sonni saqlashi mumkin. Va uzoq maksimal taxminan 9 kvadrillionni saqlashi mumkin (chiroyli so'z). Ajam dasturchining bir kilobaytda 1000 bayt bor deb o'ylashi va to'liq dasturchi kilogrammda 1024 gramm borligiga ishonishi haqidagi eski hazilni eslab, tushunishimiz mumkin:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
Aytgancha, diqqatli o'quvchi rasmda faqat 7 tur borligini payqagan bo'lishi mumkin. 8 ibtidoiy tip mantiqiy. boolean - bu faqat ikkita qiymatga ega bo'lgan mantiqiy ma'lumotlar turi: true va false. Ammo savol tug'iladi - uning o'lchami qanday? Java virtual mashinasining spetsifikatsiyasi va " 2.3.4. Boolean turi " bo'limi bizga javob beradi:
Java: bit va baytlar - 18
Ya'ni, faqat mantiqiy qiymat int bilan bir xil miqdorni oladi. Agar biz mantiqiy massivni e'lon qilsak, massivning har bir elementi 1 baytni egallaydi. Bu mo''jizalar :)

Xulosa

Birlashtirish uchun yana bir nechta materiallar bilan tanishishingizni maslahat beraman: #Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION