Kompiuteris viską laiko bitais – nuliais ir vienetais. Bitų operacijos leidžia viename skaičiuje laikyti daug „taip / ne“ reikšmių, jas akimirksniu patikrinti, įjungti ir išjungti. Taip veikia failų teisės, PHP klaidų lygiai, IP tinklai – ir tai vienas naudingiausių būdų saugoti būsenas bei nustatymus duomenų bazėje.
Skaičių galima įvesti bet kuriame lauke: HEX su 0x ar be, BIN su tarpais ar be.
Spustelėjus bitą – jis persijungia.
Operacija atliekama kiekvienai bitų porai atskirai. Spustelėk eilutę – pavyzdys įsikels į kalkuliatorių.
| Ženklas | Pavadinimas | Taisyklė | Pavyzdys | Kam naudojama |
|---|---|---|---|---|
| & | AND (ir) | 1 tik jei abu bitai 1 | 1100 & 1010 = 1000 | patikrinti ar išvalyti bitus (kaukė) |
| | | OR (arba) | 1, jei bent vienas 1 | 1100 | 1010 = 1110 | įjungti bitus |
| ^ | XOR (arba-arba) | 1, jei bitai skirtingi | 1100 ^ 1010 = 0110 | perjungti bitus, rasti skirtumus. PostgreSQL rašoma # |
| ~ | NOT (ne) | apverčia visus bitus | ~1100 = …0011 | kaukės neigimas: x & ~F |
| << | poslinkis kairėn | kiekvienas žingsnis – ×2 | 0011 << 2 = 1100 | 1 << n – n-tasis bitas |
| >> | poslinkis dešinėn | kiekvienas žingsnis – ÷2 | 1100 >> 2 = 0011 | ištraukti lauką iš skaičiaus |
x – saugoma reikšmė, F – vėliavėlė (vienas ar keli bitai). Spustelėk – įsikels į kalkuliatorių.
| Išraiška | Ką daro | Pavyzdys |
|---|---|---|
| x | F | Įjungti vėliavėlę | 1001 | 0100 = 1101 |
| x & ~F | Išjungti vėliavėlę | 1101 & ~0100 = 1001 |
| x ^ F | Perjungti | 1101 ^ 0100 = 1001 |
| (x & F) != 0 | Ar įjungta? | 1101 & 0100 = 0100 → taip |
| (x & F) == F | Ar įjungtos visos iš kelių? | 1101 & 0101 = 0101 → taip |
| (x & (T|N)) == T | Turi visas T ir neturi nė vienos N | vienas palyginimas vietoj kelių |
| (x & (x-1)) == 0 | Ar skaičius yra 2 laipsnis? | 10000 & 01111 = 0 → taip |
| x & -x | Žemiausias įjungtas bitas | 1100 & …0100 = 0100 |
| 1 << n | n-tojo bito reikšmė | 1 << 5 = 32 |
| (x >> 8) & 0xF | Ištraukti 4 bitų lauką nuo 8-o bito | 0xB00 → 11 |
Dėmesio skliaustams: PHP, C, C++, JavaScript kalbose == stipresnis už &,
todėl x & 4 == 4 reiškia x & (4 == 4). Rašyk (x & 4) == 4. Python – atvirkščiai, ten & stipresnis.
Failo teisės – tai 9 bitai: po tris savininkui, grupei ir kitiems. Kiekvienas trejetas – vienas aštuntainis skaitmuo, todėl teisės rašomos aštuntaine sistema.
| Savininkas | Grupė | Kiti | |||||||
|---|---|---|---|---|---|---|---|---|---|
| teisė | r | w | x | r | - | x | r | - | x |
| bitas | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| svoris | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
| suma | 4+2+1 = 7 | 4+1 = 5 | 4+1 = 5 | ||||||
ls -l rodo tą patį: -rwxr-xr-x. Įprastam failui – 644 (rw-r--r--).
O umask 022 – tiesiog kaukė: naujo failo teisės 666 & ~022 = 644.
Patikrink kalkuliatoriuje OCT lauke: 755 = 111 101 101.
error_reporting(E_ERROR | E_WARNING | E_PARSE) – tai trijų bitų OR: 1 | 2 | 4 = 7.
Augant PHP, nauji klaidų tipai buvo pridedami tik kairėje (didesnio svorio bitai), o seni niekada nepakeitė reikšmės –
todėl 2005 m. parašytas error_reporting(7) veikia ir šiandien.
1 įjungtas 1 naujas šioje versijoje 0 pašalintas iš E_ALL. PHP 8.4 išėmė E_STRICT (2048), bet bitas 11 neatiduotas kitam tipui – lieka tuščias. Užveskite pelę ant langelio – matysite konstantą.
Patarimas: error_reporting(-1) įjungia viską bet kurioje versijoje – -1 dvejetainėje sistemoje yra vien vienetai.
php.ini supranta operatorius | & ~ ^ !, o httpd.conf reikia rašyti jau suskaičiuotą skaičių.
IPv4 adresas – 32 bitų skaičius. Maskė – irgi 32 bitai: vienetai kairėje žymi tinklo dalį,
nuliai dešinėje – kompiuterio dalį. /24 reiškia 24 vienetus.
Kompiuteris, prieš siųsdamas paketą, daro vieną AND: jei (mano_IP & maskė) == (gavėjo_IP & maskė) – siunčia tiesiai,
jei ne – per šliuzą (gateway).
Jei būsena saugoma kaip vienas tekstas ar skaičius (busena = 'atmestas'), kiekvienas naujas įrašas
ištrina ankstesnį. Kai būsenos saugomos bitais, naujas įvykis tik įjungia savo bitą – visa istorija lieka tame pačiame lauke.
Spaudyk įvykius eilės tvarka ir palygink abu laukus. Paspaudus dar kartą, bitas išjungiamas (busena & ~F) – įprastas laukas tada lieka nepakitęs.
Visa paieška – vienas palyginimas: kaukė T|N išrenka dominančius bitus, o rezultatas turi būti lygus T.
Pavyzdiniai užsakymai, atitinkantys sąlygą, pažymėti žaliai:
Sąžiningai apie ribas: bitas pasako, kad įvykis buvo, bet ne kada – datoms reikia žurnalo lentelės.
integer talpina 31 vėliavėlę (32-as bitas – ženklas), bigint – 63. Esamų bitų prasmės keisti negalima.
Viename skaičiuje galima laikyti ne tik vėliavėles, bet ir mažus laukus – lygį ar balus. Svarbiausia iš anksto suplanuoti vietą: naujus bitus pridėti tik kairėje, o laisvą vietą rezervuoti.
Taisyklės: nauja vėliavėlė – tik į laisvą vietą kairėje; esamų bitų niekada nepernumeruok ir pašalintų
nenaudok iš naujo (kaip PHP su E_STRICT); laukui palik vietos augti; 31-ą bitą integer lauke palik ramybėje – jis ženklas.
Jei reikšmė gali augti neribotai (tikri taškai, pinigai) – jai atskiras stulpelis.
boolean.x & (x-1) – jis nuima žemiausią vienetą. Taip bitai suskaičiuojami tiek kartų, kiek yra vienetų, o ne 32 kartus./24, /20 ir t. t. vietoj senųjų A, B, C tinklų klasių. Be jo IPv4 adresai būtų baigęsi dar anksčiau.0x5f3759df – trupmeninis skaičius interpretuojamas kaip sveikasis.2147483648 ir įjunk „Su ženklu“.a ^= b; b ^= a; a ^= b; Gražu, bet šiuolaikiniai kompiliatoriai su laikinu kintamuoju susitvarko greičiau.Juodas, lengvas gruntas akvariumui, skatina augalų augimą: Jbl Manado Dark
Limituotos serijos, prestižinis led apšvietimas 60-80cm akvariumui, valdomas per programėlę: Chihiros Wrgb II 10th Edition
Stilingas led šviestuvas akvariumui: AQUAEL Leddy 10w
CO2 tirpintuvas akvariumui, molonu akiai kai burbuliukai ritmiškai kyla ir mažėja: Dennerle Co2 Flipper