JavaRush /Java Blog /Random-TK /Java: bitler we baýtlar
Viacheslav
Dereje

Java: bitler we baýtlar

Toparda çap edildi
Java: bitler we baýtlar - 1

Giriş

Adamlar onluk san ulgamynda hasaplasa, kompýuterler ikilik ulgamynda hasaplanýar. Programmist hem adamlar, hem kompýuterler bilen nädip gürleşmelidigine düşünmeli. Bu syn bu meselede kömek etmelidir. Käwagt äşgär zatlaryň aňyrsynda tutuş dünýä gizlenýär. Bu dünýä hakda gürleşmegi teklip edýärin. Mysal üçin, hepdede 7 gün bar. Indi, soraga jogap bereliň: “7” belgisi näme? ) Ilki bilen bitewi (polo positiveitel) tebigy san. Şeýle hem onluk san. Onluk san onluk ulgamdaky san. "Onluk san ulgamy" diýlende, san ulgamynyň 10 sanysynyň bardygyny aňladýar . Radiks, san görkezmek üçin berlen san ulgamynda näçe san ulanyp boljakdygyny görkezýär. Sanamak noldan. Şoňa laýyklykda sanlary onluk san ulgamynda görkezmek üçin 0-dan 9-a çenli sanlary ulanýarys. Bu gowy, ýöne diňe 9-a däl, eýsem ondanam köp sanamaly. Nädip bolmaly? Mysal üçin, 10-njy san. Bu belgini ýazmak üçin 2 san ulanýarys. Her sanyň onluk ulgamdaky ýagdaýyna onluk ýer diýilýär. Sanlar sagdan çepe hasaplanýar:
Java: bitler we baýtlar - 2
Mundan başga-da, onluk san aşakdaky ýaly giňeldilip bilner: 103 = 1 * 10 ^ 2 + 0 * 10 ^ 1 + 3 * 10 ^ 0
Java: bitler we baýtlar - 3
San esasan sagdan çepe ösýär. .Agny, başda 7, soň bolsa 10 boldy. Şonuň üçin sanlar noldan başlap sagdan hasaplanýar. Bularyň hemmesi näme? Sebäbi biz kompýuter däl. Onluk bilen hasaplasak (ýagny 10-njy esas), kompýuterler ikili hasaplanýar (ýagny 2-nji esas). Emma bu san ulgamlarynda ulanylýan düzgünler birmeňzeş.
Java: bitler we baýtlar - 4

Ikilik ulgamy

Ikilik ulgamy onluk ulgamyna gaty meňzeýär, ýeke-täk tapawudy, bu ýerdäki çäk 10 däl-de, 2. Mysal bilen deňeşdireliň. Ikilikde 11-ni nädip görkezýäris? Bu gaty ýönekeý: onluk sanlary 2-ä esaslandyrmaly, ýagny sütünde 11/2 sanamaly. Mysal:
Java: bitler we baýtlar - 5
Wika-da WikiHow-dan mysal:
Java: bitler we baýtlar - 6
Gyzykly tarapy, ikili görnüşde sanlary onlukdaky ýaly görkezip bileris: ikilikde 111 = 1 * 2 ^ 2 + 1 * 2 ^ 1 + 1 * 2 ^ 0 = 4 + 2 + 1
Java: bitler we baýtlar - 7
Ikilikden onluga öwrülmegiň mysalyny onlaýn kalkulýatorda görmek bolýar . San ulgamlarynda işlemegiň düzgünleriniň birmeňzeşdigi barada aýdanymyzda, ikilik ulgamyna goşmaça seredeliň:
Java: bitler we baýtlar - 8
Görşüňiz ýaly, goşma wagtynda sanlary onluk ulgamdaky ýaly geçirýäris. Goşmaça derňewi, mysal üçin, şu ýerde görmek bolýar: Theeri gelende aýtsak, “boşatmak” sözi wagtal-wagtal agzalýar. Bu näme? Placeer diňe sanlary görkezmegiň “gurluş elementi”. 10agny, 10-njy san iki sandan ybarat: bu belgini ýazmak üçin bize 2 san, 2 ýer, 2 element gerek. Muňa düşünmek biziň üçin möhümdir, sebäbi ikilik san ulgamynda san birneme bolýar . Bit sözi iňlis dilindäki "ikilik san" , ýagny ikilik belgiden gelýär. 0 ýa-da 1 bolup biler. Numbersöne sanlary we sözleri umuman okaýşymyz ýaly, harp bilen däl-de, kompýuterler bir gezekde biraz okamaýarlar. RAM-da gaýtadan işlenen maglumatlaryň iň az “bölegi” üçin (iň kiçi salgyly maglumat birligi diýilýär) 8 bit yzygiderliligi okalýar . Olardan 8-si bolansoň, bu "oktet" diýilýär. Şeýle hem, has meşhur Baýt sözi . Sekizligi ýatda saklamak üçin, sekiz (sekiz aýak) sözüniň iňlis diline oktopus hökmünde terjime edilendigini ýadyňyzdan çykaryp bilersiňiz. .Agny, ine, sözbaşydaky edil “okto”:
Java: bitler we baýtlar - 9
Geliň, 8 bit hökmünde görkezip biljek iň köp san haýsy hakda pikir edeliň?
Java: bitler we baýtlar - 10
Ine, şu ýerde bir sorag ýüze çykýar: negatiw sanlar hakda näme? Muňa düşünmek üçin geliň, Java-da baýtlaryň nähili görkezilýändigi barada gürleşeliň
Java: bitler we baýtlar - 11

Java we Baýt

Java-da negatiw sanlary nädip ulanyp bileris? Bu ýönekeý. Java-da baýtlara gol çekilýär. Iň çep san / bit (“iň möhüm bit” hem diýilýär): “Bu san negatiwmi?” Diýen soraga jogap berýän “marker” görnüşinde ýasalýar. Jogap hawa bolsa, markeriň 1 bahasy bar. Otherwiseogsam, 0-dyr. Geliň, 5-nji belgini negatiw 5-e öwürmegiň mysalyna seredeliň:
Java: bitler we baýtlar - 12
Bu surata esaslanyp, bir baýt bahasynyň çäklerine düşünip bilersiňiz:
Java: bitler we baýtlar - 13
Mundan başga-da:
  • birini 127-e goşsak, -128 alarys.
  • birini -128-den aýyrsak, 127 alarys.
Şeýlelik bilen, Java-da baýt -128-den 127-e çenli bahany alyp biler. Rememberadymyzda bolsa, bir baýt oktetdir. Iň ýokary san / iň ähmiýetli bit 7-den ybaratdyr, sebäbi noldan hasaplaýarys. Bu ýagdaýda bir baýtyň 7 güýji (aşaky çäk) 2-den 7 minus 1 (ýokarky çäk) güýjüne -2 deňdigini ýatdan çykarmak aňsat. Maglumatlaryň görnüşi bilen işlemek ýönekeý. Bu makala üçin onlaýn “Java” düzüjisini “repl.it” “sandbox” hökmünde ulanýarys. https://repl.it/languages/java. Mysal üçin, ikilik görnüşdäki baýt üýtgeýjini setir hökmünde görkezjek kody işledeliň:
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);
  }
}
Baýt bilen işlemek I / O akymlary bilen işleýän wagtyňyz işjeň ulanylýar. Oracle-dan: " I / O Akymlar " gollanmasynda has köp okap bilersiňiz . Mundan başga-da, Java-da bahany bit hökmünde kesgitlemek üçin ýörite göçme manyda ulanyp bilersiňiz:
class Main {
  public static void main(String[] args) {
    byte data = 0b101;
    System.out.println(data);
  }
}
Java: bitler we baýtlar - 14

Bit manipulýasiýasy

Baýtlara we bitlere degip geçmek bilen, dürli bit manipulýasiýalaryny ýatlap bolmaz. Iň köp ýaýran amal smenalardyr (bitwise shift ýa-da bit-shift). Bularyň hemmesi, netijeleriniň aýdyň amaly peýdalary bar. Ulanylyşy näme? N pozisiýalardan galan çalyşmak, sanlary 2N köpeltmek bilen deňdir. Sag tarapa geçmek hem şol bölünişige meňzeýär. Şeýlelik bilen, 5 << 2 == 5 * Math.pow (2,2) We munuň näme üçin şeýle bolýandygyna düşünmek üçin geliň bu mysaly has jikme-jik öwreneliň:
Java: bitler we baýtlar - 15
Tilde bilen aňladylýan BIT (Unary bitwise) bitleri tersine öwürýär. Tilde hökmünde ýazylýar, mysal üçin ~ 5.
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
Bu, Java sanyň belgisini üýtgedeninde, bit bahalaryny iň soňunda üýtgetmekden başga-da, +1 ýerine ýetirýändigimizi ýene bir gezek görkezýär. Bu bolmasa, görşümiz ýaly 5-nji belgimiz üýtgeýär. Belgini üýtgetmezden ozal şol bir mukdarda galmagy üçin +1 etmeli. Bitwise AND we 1 bit bilen iki dürli san goýmaga mümkinçilik berýär, diňe ähli bitleriň biriniň bahasy bar bolsa. Bu ýerde gyzykly zat, käbir amaly peýdalary bar bolmagy mümkin:
int x=4;
System.out.println((x&1) != 1);
Bu kody deňlik üçin x belgisini barlaýar. Bir mysala seredeliň:
Java: bitler we baýtlar - 16
Bitwise AND we Bitwise OR ýa-da bilelikde ulanyp, maskalary ulanyp bilersiňiz:
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");
    }
  }
Has giňişleýin maglumat üçin " Java-da bitwise operatorlary bilen maskalaşdyrmak opsiýalaryna " serediň . Bit manipulýasiýasy aýratyn synlar, makalalar we kitaplar ýazylan gyzykly mowzuk. Bu ýerden kriptografiýa üçin uzak ýol başlaýar. Bu synyň bir bölegi hökmünde, näme üçin işleýändigini we nähili işleýändigini düşünmelidiris. Bit amallary barada has giňişleýin maglumat üçin tproger-den: " Bit amallary hakda " synyny okamagy maslahat berýärin .

Ilkinji görnüşler

Şeýlelikde, bir baýt oktet, ýagny 8 bit. Java-da tötänleýin 8 sany başlangyç görnüşiň bardygyny ýatdan çykarmak aňsat. Ilkinji görnüş, programmirleme diline gurlan, ýagny deslapky görnüşde elýeterli maglumat görnüşidir. baýt, Java bilen işläp bilýän ýat aýak yzy taýdan iň kiçi başlangyç maglumat görnüşidir. Öň hem aýdyşymyz ýaly, bir baýt 8 bit alýar. Şonuň üçin iň möhüm san 7-nji san. Şonuň üçin baýt netijäniň -2-den 7-nji güýje çenli 2-den 7-nji güýje minus 1-e çenli bahalary öz içine alýar. Başga haýsy ýönekeý görnüşler bar:
Java: bitler we baýtlar - 17
Tablisadan görnüşi ýaly, tutulan maglumatlaryň mukdary boýunça maglumatlaryň görnüşleri iki esse köpelýär. .Agny, gysga = 2 * baýt we int = 2 * gysga. Aslynda ýatda saklamak aňsat. Baýt = 8 bit. Az bolup bilmejekdigi hem ýatda saklanýar. Iňlis dilinde bitewi san bitewi diýilýär. Ondan alnan başlangyç görnüş gysgaltma int diýilýärdi. Yzygiderli bitewi san bar - int. Gysga görnüşi, gysga we uzyn görnüşi bar. Şoňa laýyklykda int 32 bit (4 baýt) tutýar. Gysga wersiýa 2 esse kiçi - 16 bit (2 baýt), uzyn wersiýasy bolsa iki esse uludyr. 64 bit (8 baýt). Şeýlelik bilen, int 2 milliarddan ýüz million töweregi mukdarda saklap bilýär. Uzyn bolsa iň köp 9 kwadrillion (gowy söz) saklap biler. Täzelikçi programmistiň bir kilobaýtda 1000 baýt bar diýip pikir edýändigi baradaky köne degişmäni ýada salmak we doly programmist bir kilogramda 1024 gram bar diýip hasaplaýarys, düşünip bileris:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
.Eri gelende aýtsak, ünsli okyjy suratda diňe 7 görnüşiň bardygyny görüp biler. 8 başlangyç görnüş bulean. “Boolean” diňe iki gymmaty bolan “Boolean” maglumat görnüşidir: dogry we ýalan. Emma sorag ýüze çykýar - ululygy nähili? Java wirtual maşynyň aýratynlygy we " 2.3.4. Boolean görnüşi " bölümi bize jogap berer:
Java: bitler we baýtlar - 18
.Agny, diňe bir “int” bilen deň mukdarda pul alar. Boolean massiwini yglan etsek, massiwiň her elementi 1 baýt tutar. Bular şeýle gudratlar :)

Netije

Jebisleşdirmek üçin ýene birnäçe material bilen tanyşmagyňyzy maslahat berýärin: # Wiaçeslaw
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION