PHP modulo dijeljenje. PHP: Aritmetički operatori. Operacije inkrementiranja i dekrementiranja

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Programeri koji trebaju obavljati osjetljive numeričke, znanstvene ili statističke izračune vjerojatno neće smatrati web skriptni jezik prihvatljivim kandidatom za ovu ulogu. No, unatoč navedenom, PHP jezik nudi izvrstan skup funkcija koje u potpunosti pružaju rješenje za većinu matematičkih problema koji se javljaju u procesu izvršavanja skripti za web. Uz to, PHP pruža neke naprednije mogućnosti, kao što je aritmetika proizvoljne preciznosti, biblioteke za raspršivanje i kriptografske biblioteke.

Programeri PHP jezika zauzeli su dobro utemeljen pristup i nisu pokušali ponovno izmisliti kotače dizajnirane za ovu svrhu. Činjenica je da su mnoge od najosnovnijih matematičkih funkcija koje se koriste u PHP-u jednostavno omotači svojih C parnjaka.

Matematičke operacije

Većina matematike u PHP-u radi se u obliku ugrađenih funkcija, a ne operacija. Uz operatore za usporedbu, PHP nudi pet jednostavnih aritmetičkih operatora, kao i neke operatore prečaca koji vam omogućuju konstruiranje kraćih izraza za povećanje, smanjenje i dodjelu.

Aritmetičke operacije

Pet osnovnih aritmetičkih operacija uključuje one koje se uobičajeno provode u bilo kojem kalkulatoru s četiri funkcije, plus modulo (%). Kratak opis aritmetičkih operacija dan je u tablici:

Aritmetičke operacije
Operacija Opis
+ Vraća zbroj vrijednosti svoja dva operanda
- Ako postoje dva operanda, tada se vrijednost desnog operanda oduzima od vrijednosti lijevog. Ako postoji samo desni operand, tada operacija vraća vrijednost tog operanda sa suprotnim predznakom
* Vraća umnožak vrijednosti svoja dva operanda
/ Vraća rezultat s pomičnim zarezom dijeljenja vrijednosti lijevog operanda s vrijednošću desnog operanda
% Vraća ostatak cijelog broja podijeljen s vrijednošću lijevog operanda i apsolutnom vrijednošću desnog operanda

Kada koristite prve tri gore opisane aritmetičke operacije (+, -, *) u programu, trebali biste uzeti u obzir da se pri izvođenju ovih operacija propagacija tipa događa od vrijednosti s pomičnim zarezom dvostruke preciznosti do cjelobrojnih vrijednosti. To znači da ako su oba operanda operacije cijeli brojevi, tada je rezultat cijeli broj, a ako je barem jedan od operanda broj s pomičnim zarezom dvostruke preciznosti, tada je rezultat pomični zarez dvostruke preciznosti broj. Propagacija istog tipa događa se prilikom izvođenja operacije dijeljenja; osim toga, postoji dodatni učinak da rezultat postaje broj s pomičnim zarezom dvostruke preciznosti ako se dijeljenje ne izvrši bez ostatka (u cijelosti).

Modulo (%) operacija u PHP-u prihvaća cjelobrojne operande, a kada se ova operacija primjenjuje na brojeve s pomičnim zarezom dvostruke preciznosti, tada se ti brojevi prvo pretvaraju u cijele brojeve (odbacivanjem razlomka). Rezultat takve operacije uvijek je cijeli broj.

Operacije inkrementiranja i dekrementiranja

Velik dio PHP sintakse izveden je iz C-a, a C programeri poznati su po svojoj ljubavi prema sažetosti i ponose se time. Operatori inkrementiranja i dekrementiranja, preuzeti iz jezika C, omogućuju konciznije predstavljanje izraza poput $count = $count + 1, koji se obično često nalaze u programima.

Operator inkrementiranja (++) koristi se za dodavanje jedan vrijednosti varijable na koju operacija utječe, a operator dekrementiranja (--) oduzima jedan od vrijednosti varijable.

Svaka od ove dvije operacije ima dvije varijante - sufiks(u ovom se obliku znak operacije stavlja neposredno iza varijable na koju operacija utječe) i prefiks(u ovom obliku znak operacije se stavlja neposredno ispred varijable na koju se operacija odnosi). Oba imaju istu nuspojavu promjene vrijednosti varijable, ali operatori sufiksa i prefiksa vraćaju različite vrijednosti kada se koriste kao izrazi. Operacija sufiksa funkcionira tako da se vrijednost varijable mijenja nakon što se vrati vrijednost izraza, a operacija prefiksa djeluje tako da se vrijednost prvo promijeni, a zatim se nova vrijednost vrati varijabli. Ova se razlika može otkriti korištenjem operatora dekrementa i inkrementa u operatorima dodjele:

PHP kod $count = 0; $rezultat = $count++; echo "Rezultat inkrementa $count++: ".$result."
"; $count = 0; $result = ++$count; echo "Rezultat povećanja ++$count: ".$result."
";

Sljedeće izjave proizvode sljedeći izlaz u prozoru preglednika:

Operacije povećanja

U ovom primjeru, operator $result = $count++ potpuno je ekvivalentan operatorima:

PHP kod $rezultat = $broj; $count = $count + 1;

Uz to, operator $result = ++$count je ekvivalentan sljedećim operatorima:

PHP kod $count = $count +1; $rezultat = $broj;

Operatori dodjele

Operatori inkrementiranja (i dekrementiranja) smanjuju količinu koda potrebnog za dodavanje jedinice vrijednosti varijable, ali ne smanjuju količinu koda koji varijabli dodjeljuje rezultat dodavanja njezine vrijednosti drugom broju ili rezultat drugih aritmetičkih operacija . Srećom, svih pet aritmetičkih operatora imaju odgovarajuće operatore dodjele (+=, -=, *=, /= i %=), koji vam omogućuju da rezultat aritmetičke operacije na vrijednosti te varijable dodijelite varijabli u jednom kratki izraz. Na primjer, operater

PHP kod $count = $count * 3;

može se skratiti kao

PHP kod $count *= 3;

Jednostavne matematičke funkcije

Sljedeći korak u izradi programa složenijeg od onog koji koristi samo aritmetičke operacije jest korištenje svih vrsta funkcija. Funkcije vam omogućuju izvršavanje zadataka kao što je pretvaranje iz jedne vrste broja u drugu (pogledajte članak Vrste podataka) i pronalaženje minimalnog ili maksimalnog broja u skupu brojeva. Sljedeća tablica prikazuje jednostavne matematičke funkcije:

Jednostavne PHP matematičke funkcije
Funkcija Opis
kat() Uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najveći cijeli broj koji je manji ili jednak tom stvarnom parametru (zaokruži prema dolje)
staviti strop() Naziv ove funkcije je skraćenica od riječi strop. Funkcija uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najmanji cijeli broj koji je veći ili jednak tom stvarnom parametru (zaokružujući naviše)
krug() Uzima jedan stvarni parametar (obično broj s pomičnim zarezom dvostruke preciznosti) i vraća najbliži cijeli broj
trbušnjaci () Apsolutna vrijednost broja. Ako jedini numerički stvarni parametar ima negativnu vrijednost, tada funkcija vraća odgovarajući pozitivni broj; ako je stvarni parametar pozitivan, tada funkcija vraća sam stvarni parametar
min() Prihvaća bilo koji broj numeričkih stvarnih parametara (ali najmanje jedan) i vraća najmanju od svih stvarnih vrijednosti parametra
max() Prihvaća bilo koji broj numeričkih stvarnih parametara (ali ne manje od jednog) i vraća najveću od svih stvarnih vrijednosti parametra

Na primjer, rezultat sljedećeg izraza je 3 jer je vrijednost svakog izraza poziva funkcije također 3:

PHP kod $rezultat = min(3, trbušnjaci(-3), max(okruglo(2.7), strop(2.3), pod(3.9))));

Generiranje nasumičnih brojeva

PHP jezik koristi dva generatora slučajnih brojeva (koji se pozivaju pomoću funkcija rand() I mt_rand()). Svakom od ovih generatora pridružene su tri funkcije iste namjene: funkcija postavljanja početne vrijednosti ( srand() I mt_srand()), sama funkcija za dobivanje slučajnog broja i funkcija koja uzorkuje najveći cijeli broj koji može vratiti generator (( getrandmax() I mt_getrandmax())). Funkcije getrandmax() i mt_getrandmax() vraćaju najveći broj koji može vratiti rand() ili mt_rand(), koji je ograničen na 32768 na Windows platformama.

Odabir specifične funkcije generiranja pseudoslučajnih brojeva koja se koristi u funkciji rand() može ovisiti o tome s kojim je bibliotekama PHP interpreter kompajliran. Nasuprot tome, generator mt_rand() uvijek koristi istu funkciju generiranja pseudoslučajnih brojeva (mt je skraćenica za Mersenne Twister), a autor operativne dokumentacije za funkciju mt_rand() tvrdi da je ova funkcija također brža i " više random" (s kriptografske točke gledišta) nego rand(). Nemamo razloga sumnjati u istinitost ovih izjava, zbog čega radije koristimo funkciju mt_rand() nego rand().

Kada koristite neke verzije PHP-a na nekim platformama, čini se da funkcije rand() i mt_rand() proizvode naizgled razumne slučajne brojeve, čak i bez prethodnog postavljanja početne vrijednosti. Ali takvom dojmu ne treba vjerovati. Prvo, programi koji koriste funkcije za generiranje nasumičnih brojeva bez navođenja početne vrijednosti ne mogu se jednostavno prenijeti na druge platforme, i, drugo, nije zajamčeno pouzdan rad ovih funkcija bez navođenja početne vrijednosti.

Tipičan način postavljanja početne vrijednosti za bilo koji od PHP-ovih generatora slučajnih brojeva (koristeći funkciju mt_srand() ili srand() je sljedeći:

PHP kod mt_srand((double)microtime()*1000000);

Ovaj operator postavlja početnu vrijednost generatora, jednaku broju mikrosekundi koje su prošle do tog vremena od posljednje cijele sekunde. (Prebacivanje na double u ovoj izjavi je zapravo neophodno jer funkcija microtime() vraća niz, koji se tretira kao cijeli broj u operaciji množenja, ali ne i u operaciji prosljeđivanja parametara u funkciju.) Preporučujemo da čitatelj unese navedeni operator inicijalizacije čak i ako mu svrha ovog operatora nije sasvim jasna; Jednostavno postavljanje ove naredbe na svaku PHP stranicu, samo jednom, prije korištenja odgovarajuće funkcije mt_rand() ili rand(), osigurat će promjenu početne točke i stoga svaki put proizvesti drugačiji slučajni niz.

Ovu posebnu metodu postavljanja početne vrijednosti duboko su osmislili oni stručnjaci koji u potpunosti razumiju sve nijanse generiranja pseudoslučajnih brojeva, stoga će najvjerojatnije zauvijek ostati bolji od bilo kakvih pokušaja bilo kojeg pojedinačnog programera da smisli nešto "zeznutiji".

Očito, ove funkcije za generiranje pseudo-slučajnih brojeva vraćaju samo cijele brojeve, ali slučajni cijeli broj iz zadanog raspona može se lako pretvoriti u odgovarajući broj s pomičnim zarezom (recimo, broj iz raspona od 0,0 do uključivo 1,0) pomoću izraza poput rand () / getrandmax(). Navedeni raspon se zatim može skalirati i pomicati po potrebi. Dolje je primjer:

PHP kod // Recimo da trebamo generirati nasumični broj od 100.0 do 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $random."
"; // Generiraj cijele brojeve (100 - 120); echo round($random);

Pokušajte nekoliko puta osvježiti stranicu ovim kodom kako biste bili sigurni da se generiraju nasumični brojevi.

Matematičke konstante

U PHP verziji 4.0 postojala je samo jedna matematička konstanta opisana u dokumentaciji - M_PI (vrijednost π, predstavljena kao broj s pomičnim zarezom dvostruke preciznosti). A počevši od PHP 4.0.2, uvedene su mnoge nove konstante. Većina ovih novih konstanti odnosila se na π (ili njegove višekratnike), e (ili njegove višekratnike) i kvadratne korijene; osim toga, neke su konstante pripadale drugim vrstama. Ali u narednim izdanjima, iz niza razloga, popis konstanti ponovno je smanjen na relativno mali broj unaprijed definiranih matematičkih konstanti:

PHP matematičke konstante
Konstantno Opis
M_PI π
M_PI_2 π/2
M_PI_4 π/4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / sqrt(π)
MI e
M_SQRT2 sqrt(2)
M_SQRT1_2 1 / sqrt(2)
M_LOG2E log2(e)
M_LOG10E loža)
M_LN2 loža (2)
M_LN10 log (10)

Provjera formata broja

Jezik PHP nudi niz funkcija koje vam omogućuju provjeru ispravnog prikaza brojeva. Iako PHP nema strogu provjeru tipa, preporuča se da implementirate neke od ovih provjera u svoj kod kada je to potrebno kako biste mogli predvidjeti karakteristike rezultata koje primate i odabrati najbolji način za njihovu obradu.

Prva i najjednostavnija provjera je korištenje funkcije je_numeric(). Kao i kod većine drugih takvih testova, funkcija is_numeric vraća Booleov rezultat - true ako je parametar proslijeđen numerički podatak bilo koje vrste (s predznakom ili bez predznaka, cijeli broj ili s pomičnim zarezom) ili matematički izraz koji vraća valjanu numeričku vrijednost.

Korištenje funkcija je_int() I is_float Možete odrediti je li broj cijeli ili razlomak. Još dvije provjere su malo složenije: funkcije je_konačno() I je_beskonačno() omogućuju izvođenje točno onih testova koje njihova imena pokazuju (bez obzira je li broj konačan ili beskonačan). No, strogo govoreći, raspon vrijednosti preko kojeg se te funkcije protežu ne može uključivati ​​stvarnu beskonačnost (i može li se uopće provjeriti ima li broj beskonačno veliku vrijednost?). Umjesto toga, koriste se ograničenja raspona vrijednosti s pomičnim zarezom dopuštenih na određenom sustavu.

Ispod je primjer korištenja ovih funkcija:

PHP kod je_numerički(4); // true is_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // lažno is_int(4); // istina je_int(4.2); // lažno is_int("4"); // false - ova je provjera stroža od provjere pomoću funkcije is_numeric() is_float(4); // lažno is_float(4.0); // istina is_float(M_PI); // istina

Pretvorba brojevnih sustava

Prema zadanim postavkama, PHP koristi bazu 10 za pretvaranje numeričkih vrijednosti iz vanjske u internu reprezentaciju naprijed i natrag. Također možete reći PHP tumaču da eksterna reprezentacija koristi oktalne brojeve baze 8 (da biste to učinili, morate unijeti početnu 0). ), ili heksadecimalni brojevi navedeni u bazi 16 (da biste to učinili, morate staviti ispred broja 0x).

Naravno, nakon pretvorbe brojeva iz vanjskog prikaza u interni, oni se pohranjuju u memoriju u binarnom formatu, a svi osnovni aritmetički i matematički izračuni se provode u samom operativnom sustavu u bazi 2. Osim toga, PHP jezik pruža niz funkcija za pretvaranje brojeva iz jedne baze brojačkog sustava u drugu. Pregled ovih značajki nalazi se u tablici u nastavku:

Funkcije pretvorbe brojevnog sustava
Funkcija Opis
BinDec() Uzima jedan parametar niza koji je binarni cijeli broj (broj s bazom 2) i vraća prikaz niza s bazom 10 tog broja
DecBin() Slično BinDec(), ali pretvara iz baze 10 u bazu 2
listopad() Slično BinDec(), ali pretvara iz baze 8 u bazu 10
Kuhanjem dobiti esenciju() Slično BinDec(), ali pretvara iz baze 10 u bazu 8
HexDec() Slično BinDec(), ali pretvara iz baze 16 u bazu 10
DecHex() Slično BinDec(), ali pretvara iz baze 10 u bazu 16
base_convert() Prihvaća parametar niza (koji predstavlja cijeli broj koji treba pretvoriti) i dva cjelobrojna parametra (izvorni i željeni radiks). Vraća niz koji predstavlja pretvoreni broj. U ovom retku brojevi veći od 9 (10 do 35) predstavljeni su znakovima a-z. I izvorna i željena baza moraju biti unutar raspona 2-36

Sve funkcije pretvorbe brojevnog sustava su funkcije posebne namjene koje pretvaraju brojeve iz jedne specifične baze u drugu. Izuzetak je funkcija base_convert(), koja prihvaća proizvoljne parametre koji označavaju početnu i rezultirajuću bazu.

Imajte na umu da sve funkcije pretvorbe brojevnog sustava prihvaćaju parametre niza i vraćaju vrijednosti niza, ali možete koristiti decimalne numeričke parametre i osloniti se na PHP tumač da će ispravno izvršiti pretvorbu tipa. Drugim riječima, i DecBin("1234") i DecBin(1234) daju isti rezultat.

Eksponenti i logaritmi

Jezik PHP uključuje standardne eksponencijalne i logaritamske funkcije u dvije varijante - za rad u bazi 10 i bazi e (koje su prikazane u tablici).

PHP pruža funkciju exp() za podizanje e na zadanu potenciju, ali ne postoji funkcija s jednim parametrom za podizanje 10 na zadanu potenciju, ali umjesto toga možete koristiti funkciju pow(), koja uzima dva parametra, dajući 10 kao prvi parametar.

Možete provjeriti da su eksponencijalne i logaritamske funkcije s istom bazom inverzne jedna drugoj provjerom identičnosti rezultata dobivenih na ovaj način:

PHP kod $test_449 = 449,0; $test_449 = pow(10, exp(log(log10($test_449)))); echo "test_449 = $test_449"; // test_449 = 449

Trigonometrijske funkcije

PHP jezik pruža standardni skup osnovnih trigonometrijskih funkcija, opće informacije o kojima su dane u tablici:

Trigonometrijske funkcije
Funkcija Opis
pi() Ne uzima nikakve parametre i vraća približnu vrijednost π (3,1415926535898). Može se koristiti naizmjenično s M_PI konstantom
grijeh() Prihvaća numerički parametar u radijanima i vraća sinus parametra kao broj s pomičnim zarezom dvostruke preciznosti
cos() Uzima numerički parametar u radijanima i vraća kosinus parametra kao broj s pomičnim zarezom dvostruke preciznosti
preplanulost() Prihvaća numerički parametar u radijanima i vraća tangens parametra kao broj s pomičnim zarezom dvostruke preciznosti
asin() Uzima numerički parametar i vraća arksinus parametra u radijanima. Unosi moraju biti između -1 i 1 (funkcija koja prima ulaze izvan ovog raspona rezultira NAN rezultatom). Rezultati se kreću od -π/2 do π/2
akos() Uzima numerički parametar i vraća ark kosinus parametra u radijanima. Unosi moraju biti u rasponu od -1 do 1 (funkcija koja prima ulaze izvan ovog raspona rezultira NAN rezultatom. Rezultati su u rasponu od 0 do π
atan() Uzima numerički parametar i vraća arktangens parametra u radijanima. Rezultati se kreću od -π/2 do π/2

Ispod je primjer sastavljanja tablice za izračun trigonometrijskih funkcija za "standardne" kutove:

PHP kod funkcija display_trigonometry($func_array, $input_array) ( // Echo zaglavlja funkcije " "; ) jeka ""; // Ispis ostatka tablice foreach($input_array kao $input) ( echo " "; foreach($func_array as $func) ( echo " "; ) jeka ""; ) jeka "
Značenje/funkcija$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; ) prikaz_trigonometrije(niz("sin", "cos", "tan"), niz(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Primjer korištenja trigonometrijskih funkcija u PHP-u

Razlog za dobivanje vrlo velikih (ali ne beskonačnih) tangentnih vrijednosti je taj što bi nazivnici teoretski trebali biti nula, ali u stvarnosti se malo razlikuju od nule zbog pogrešaka zaokruživanja.

Izračun proizvoljne preciznosti (pomoću BC funkcija)

Cjelobrojni tipovi i tipovi pomičnog zareza dvostruke preciznosti savršeno su prikladni za većinu matematičkih problema koji se susreću u web skriptiranju, ali svaka instanca vrijednosti koju predstavljaju ti tipovi zahtijeva fiksnu količinu računalne memorije, tako da veličina i preciznost predstavljanja brojeva ovih tipova neizbježno nameću ograničenja.

Naravno, točni rasponi vrijednosti ovih tipova podataka mogu ovisiti o arhitekturi poslužiteljskog računala, ali cjelobrojne vrijednosti obično mogu biti u rasponu od -2 31 -1 do 2 31 -1, a brojevi s pomičnim zarezom dvostruke preciznosti mogu predstavljaju brojeve s preciznošću od oko 13 do 14 decimalnih znamenki. S druge strane, za rješavanje problema koji zahtijevaju korištenje šireg raspona predstavljanja ili veće preciznosti, PHP pruža matematičke funkcije proizvoljne preciznosti(također zvane BC funkcije, nazvane po pomoćnom programu proizvoljne preciznosti temeljenom na Unixu).

Može se dogoditi da funkcije proizvoljne preciznosti nisu uključene u kompilaciju PHP interpretera, posebno ako je korisnik sam napravio kompilaciju, budući da bi za to korisnik morao znati da je u fazi konfiguracije potrebno uključiti potvrdni okvir u parametri --enable-bcmath. Kako biste provjerili jesu li navedene funkcije dostupne, pokušajte evaluirati izraz bcadd("1","1"). Ako primite poruku o pogrešci koja navodi nedefiniranu funkciju, morat ćete ponovno konfigurirati PHP tumač i ponovno ga kompajlirati.

BC funkcije koriste nizove umjesto numeričkih tipova fiksne duljine kao parametre i povratne vrijednosti. Budući da je u PHP-u duljina nizova ograničena samo količinom dostupne memorije, brojevi koji se koriste u izračunima mogu biti bilo koje duljine. Osnovni izračuni rade se u decimalnom obliku i slični su onima koje osoba može napraviti s olovkom i papirom (ako može raditi vrlo brzo i biti strpljiva). Funkcije cjelobrojnih brojeva BC precizne su i omogućuju vam da koristite onoliko znamenki koliko je potrebno, dok funkcije s pomičnim zarezom izvode izračune točne na određeni broj decimalnih mjesta. Opće informacije o BC funkcijama dane su u tablici ispod:

Matematičke funkcije proizvoljne preciznosti (BC funkcije)
Funkcija Opis
bcadd() Prihvaća dva parametra niza koji predstavljaju brojeve i izborni cjelobrojni parametar koji označava faktor razmjera. Vraća zbroj prva dva parametra kao niz, s brojem decimalnih mjesta u rezultatu određenim parametrom koji pokazuje faktor razmjera. Ako parametar koji pokazuje faktor razmjera nije naveden, koristi se zadani faktor razmjera
bcsub() Slično bcadd(), osim što vraća rezultat oduzimanja drugog parametra od prvog
bcmui() Slično bcadd(), osim što vraća rezultat množenja svojih parametara
bcdiv() Slično bcadd(), osim što vraća rezultat dijeljenja prvog parametra drugim
bcmod() Vraća modul (ostatak) dijeljenja prvog parametra s drugim. Budući da je povratna vrijednost cijeli broj, funkcija ne prihvaća parametar koji pokazuje faktor razmjera
bcpow() Podiže prvi parametar na snagu navedenu drugim parametrom. Broj decimalnih mjesta u rezultatu određen je faktorom razmjera, ako je naveden
bcsqrt() Vraća kvadratni korijen parametra s brojem decimalnih mjesta određenim vrijednošću izbornog faktora ljestvice
bcscale() Postavlja zadani faktor razmjera za sljedeće pozive funkcije BC

Većina ovih funkcija kao zadnji parametar uzima izborni faktor ljestvice (cijeli broj), koji određuje koliko decimalnih mjesta rezultat treba imati. Ako ovaj parametar nije naveden, zadani faktor skale koristi se kao faktor skale, koji se pak može postaviti pozivom funkcije bcscale(). Zadana vrijednost za ovu zadanu vrijednost (tj. vrijednost koja se koristi ako skripta ne poziva bcscale()) također se može postaviti u datoteci za inicijalizaciju php.ini.

Dolje je primjer korištenja funkcije proizvoljne preciznosti za točno izvođenje cjelobrojnih aritmetičkih operacija. Izvršavanje sljedećeg koda:

PHP kod za ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Precizan izračun astronomskih veličina korištenjem BC funkcija

Ako bi se za ove izračune koristio regularni PHP cjelobrojni tip, tada bi se prekoračenje cjelobrojnog broja dogodilo puno prije kraja izračuna, tako da bi ostatak petlje izvršio izračune kako bi dobio približan broj s pomičnim zarezom.

Obrada obrazaca polja 1 2 3 4 5 6 7 8 9 10

Logičke operacije postoje u svim programskim jezicima i PHP nije iznimka. Osim jednostavnog dijeljenja, množenja, zbrajanja ili oduzimanja, postoje i dijeljenja na cijeli broj i ostatak, o kojima ćemo sada govoriti i analizirati ih na detaljnim primjerima.

Cjelobrojno dijeljenje je izlaz cjelobrojnog dijela iz dijeljenja. Na primjer, ako podijelimo 5 sa 2, dobit ćemo 2, a ne 2,5.

S rezidualnom podjelom sve je drugačije. Ovo je rezultat ostatka kada se podijeli s cijelim brojem. Na primjer, dijeljenjem istih pet dobit ćete ne 2, već 1, jer dijeljenjem 5 s 2 dobivamo 2, a ostatak je 1.

Kako napraviti cjelobrojno dijeljenje u PHP-u

Na primjer, u Pythonu se ova podjela vrši pomoću jednostavnog operatora: "//".

A u PHP-u to neće biti tako lako, ali ipak proces ne zahtijeva super poznavanje jezika.

Dajmo primjer kako se to može provesti.

U PHP verziji sedam, funkcija izgleda ovako:

U starijoj verziji ista funkcija izgleda ovako:

Također postoji metoda za sve verzije:

Kako se prijaviti?

Na primjer, uzmimo prvu funkciju, sve ostale se izvode na približno isti način.

$rezultat = intdiv(10, 3); echo $rezultat;

Dijeljenje ostatka u PHP-u

Kako biste prikazali cjelobrojni ostatak dijeljenja u PHP-u, jednostavno upotrijebite operator "%".

$i = 10% 3; odjek $i;

Kao što vidimo, sve je vrlo jednostavno i ne zahtijeva duga objašnjenja.

Gdje se može koristiti?

Poznavanje cjelobrojnog dijeljenja u PHP-u bit će vrlo korisno ako trebate usporediti dva broja, stvoriti obrnuti broj (popularna vježba) ili, na primjer, program koji se zove FizzBuzz. Njegova suština je da morate napisati ciklus od 1 do 100, koji svaki broj dijeli s 3 i 5. Ako broj podijeljen s 3 ima ostatak 0, tada pišemo Fizz, ako dijelimo s 5, onda Buzz, a ako je , dijeljenjem i 5 i 3, ostatak 0, tada pišemo FizzBuzz. Ovo je vrlo popularan zadatak za intervju. Ako ste ga sami završili, možete biti ponosni na sebe.

Ili, na primjer, sve njegove brojeve (4, 5, 2) moramo izvesti iz broja 452.

Zaključak

Naravno, podjela na cijeli broj i ostatak je korisna i prilično uobičajena; nije tako zgodna za korištenje kao u Pythonu, ali je i dalje važna.

Sada ste jedan korak bliže učenju programskog jezika PHP, a bit ćete još bliže u budućnosti ako budete jednako naporno radili na svladavanju izazova.

Sve osnovne matematičke operacije dostupne su u PHP-u. I cijeli i realni brojevi mogu se koristiti kao operandi.

Tablica prikazuje popis aritmetičkih operatora:
OperaterZnakOpis
Dodatak + Zbrajanje dviju vrijednosti
Oduzimanje - Oduzimanje jedne vrijednosti od druge
Množenje * Množenje dviju vrijednosti
Podjela / Dijeljenje jedne vrijednosti drugom
Dobivanje ostatka dijeljenja % Dijeljenje jedne vrijednosti drugom i vraćanje ostatka (modulo dijeljenje)
Povećanje ++ Skraćenica za povećanje broja za jedan
Smanjenje -- Skraćenica za smanjenje broja za jedan
Unarna negacija - Pretvaranje pozitivnog broja u negativan ili negativnog broja u pozitivan

Operatori oduzimanja, množenja, dijeljenja, modula i zbrajanja

Operatori oduzimanja, množenja, dijeljenja, modula i zbrajanja koriste se na isti način kao u matematici. Ovdje vrijedi obratiti pozornost na operatore dijeljenja i modula.

Operator dijeljenja (" / ") vraća broj s pomičnim zarezom, osim ako su obje vrijednosti cijeli brojevi (ili nizovi koji se pretvaraju u cijele brojeve) koji se dijele cijelim brojem, u kojem slučaju vraća vrijednost cijelog broja.

rezultat2 = $rezultat2
"; echo "rezultat3 = $rezultat3
rezultat4 = $rezultat4"; ?>

U modulnom dijeljenju, operandi se pretvaraju u cijele brojeve (s razlomljenim dijelom uklonjenim) prije početka operacije. Rezultat operacije ostatka dijeljenja % imat će isti predznak kao i dividenda:

Unarna negacija

Unarni operator negacije označen je znakom "-" i obrće značenje svog jedinog operanda:

U ovom slučaju, zagrade nisu potrebne jer unarna negacija ima najveći prioritet, ali one pomažu organizirati kod tako da bude jasno da se zbrajaju brojevi -5 i 4.

Povećanje

Operator inkrementa označen je znakom ++ i može se postaviti s obje strane operanda na kojem djeluje. Povećava ovu vrijednost za jedan, baš kao da dodaje jedan vrijednosti. Stvarni rezultat ovisi o tome je li operator primijenjen prije ili poslije operanda s kojim je primijenjen. Ovaj se operator često koristi s varijablama, a često se to događa unutar petlji (o petljama će biti riječi kasnije).

Prefiksni oblik prirasta

Prefiksni oblik- ovo je kada se operator inkrementa nalazi ispred operanda, ovaj oblik zapisa znači da će inkrement biti prvi izvršen: povećava vrijednost operanda za jedan i tek onda se izvršava ostatak instrukcije:

Postfiksni oblik prirasta

Postfiksni oblik piše se malo drugačije - inkrement se u ovom slučaju nalazi iza operanda. U postfiksnoj notaciji, prva upotreba operanda vraća njegovu trenutnu vrijednost, tek nakon toga vrijednost će se povećati za jedan:

Smanjenje

Operator dekrementa označava se znakom --, i za razliku od operatora inkrementa, on smanjuje, a ne povećava vrijednost svog operanda za jedan. Dekrement također dopušta prefiksnu i postfiksnu notaciju:

Logičke operacije postoje u svim programskim jezicima i PHP nije iznimka. Osim jednostavnog dijeljenja, množenja, zbrajanja ili oduzimanja, postoje i dijeljenja na cijeli broj i ostatak, o kojima ćemo sada govoriti i analizirati ih na detaljnim primjerima.

Cjelobrojno dijeljenje je izlaz cjelobrojnog dijela iz dijeljenja. Na primjer, ako podijelimo 5 sa 2, dobit ćemo 2, a ne 2,5.

S rezidualnom podjelom sve je drugačije. Ovo je rezultat ostatka kada se podijeli s cijelim brojem. Na primjer, dijeljenjem istih pet dobit ćete ne 2, već 1, jer dijeljenjem 5 s 2 dobivamo 2, a ostatak je 1.

Kako napraviti cjelobrojno dijeljenje u PHP-u

Na primjer, u Pythonu se ova podjela vrši pomoću jednostavnog operatora: "//".

I u PHP ovo neće biti tako lako učiniti, ali ipak proces ne zahtijeva super poznavanje jezika.

Dajmo primjer kako se to može provesti.

U PHP u sedmoj verziji funkcija izgleda ovako:

Intdiv();

U starijoj verziji ista funkcija izgleda ovako:

Također postoji metoda za sve verzije:

Kat();

Kako se prijaviti?

Na primjer, uzmimo prvu funkciju, sve ostale se izvode na približno isti način.

$rezultat = intdiv(10, 3); echo $rezultat;

Dijeljenje ostatka u PHP-u

Za prikaz cjelobrojnog ostatka dijeljenja u PHP Dovoljno je samo koristiti operator "%".

$i = 10% 3; odjek $i;

Kao što vidimo, sve je vrlo jednostavno i ne zahtijeva duga objašnjenja.

Gdje se može koristiti?

Poznavanje cjelobrojnog dijeljenja PHP bit će vrlo koristan ako trebate usporediti dva broja, stvoriti obrnuti broj (popularna vježba) ili, na primjer, program koji se zove FizzBuzz. Njegova suština je da morate napisati ciklus od 1 do 100, koji svaki broj dijeli s 3 i 5. Ako broj podijeljen s 3 ima ostatak 0, tada pišemo Fizz, ako dijelimo s 5, onda Buzz, a ako je , dijeljenjem i 5 i 3, ostatak 0, tada pišemo FizzBuzz. Ovo je vrlo popularan zadatak intervjua. Ako ste ga sami završili, možete biti ponosni na sebe.

Ili, na primjer, sve njegove brojeve (4, 5, 2) moramo izvesti iz broja 452.

Zaključak

Naravno, podjela na cijeli broj i ostatak je korisna i prilično uobičajena; nije tako zgodna za korištenje kao u Pythonu, ali je i dalje važna.

Sada ste korak bliže učenju programskog jezika PHP a ubuduće ćete se još više zbližiti budete li jednako marljivo svladavali poteškoće.

Operacije s PHP varijablama (operatori)

Postoje razne skupine za implementaciju.

Operator je nešto što se sastoji od jedne ili više vrijednosti (izrazi u programskom žargonu) koje se mogu evaluirati kao nova vrijednost (dakle, cijela konstrukcija se može smatrati izrazom). Slijedi da funkcije ili bilo koje druge konstrukcije koje vraćaju vrijednost (npr. ispis()) su operatori, za razliku od svih drugih jezičnih konstrukcija (npr. jeka()), koji ništa ne vraćaju.

Aritmetičke operacije u PHP-u

Sjećate li se školskih osnova aritmetike? Operatori opisani u nastavku rade na isti način.

Operator dijeljenja ("/") uvijek vraća stvarni tip, čak i ako su obje vrijednosti bile cijeli brojevi (ili nizovi koji se pretvaraju u cijele brojeve). Inače, rezultat će biti frakcijski.

Operacija izračunavanja ostatka dijeljenja " % " radi samo s cijelim brojevima, pa njegova primjena na razlomke može proizvesti neželjene rezultate.

Moguće je koristiti zagrade. Prednost određenih matematičkih operacija nad drugima i promjena prioriteta pri korištenju zagrada u aritmetičkim izrazima slijede uobičajena pravila matematike.

Operacije inkrementiranja i dekrementiranja

PHP, poput C-a, podržava prefiksne i postfiksne operatore inkrementiranja i dekrementiranja.

Postfiksni operatori inkrementiranja i dekrementiranja

Kao u C-u, ovi operatori povećavaju ili smanjuju vrijednost varijable, au izrazu vraćaju vrijednost varijable $a prije promjene. Na primjer:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Ispisuje a=11, b=10

Kao što vidite, prvo varijabla $b vrijednost dodijeljena varijabli $a, a tek onda je posljednji inkrementiran. Međutim, izraz čija je vrijednost dodijeljena varijabli $b, može biti teže - u svakom slučaju, povećanje $a dogodit će se tek nakon što se izračuna.

Operatori inkrementiranja i dekrementiranja prefiksa

Također postoje operatori inkrementiranja i dekrementiranja, koji su specificirani umjesto iza naziva varijable. Sukladno tome vraćaju vrijednost varijable nakon promjene. Primjer:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Ispisuje a=9, b=9

U praksi se vrlo često koriste operacije inkrementiranja i dekrementiranja. Na primjer, pojavljuju se u gotovo svakom ciklusu za .

jeka "

Postfiksni inkrement

" ;
$a = 5;
echo "Mora biti 5: " . $a++ . "
\n" ;

\n" ;

Jeka "

Povećanje prefiksa

" ;
$a = 5;
echo "Trebalo bi biti 6: " . ++ $a . "
\n" ;
echo "Trebalo bi biti 6: " . $a . "
\n" ;

Jeka "

Postfiksni dekrement

" ;
$a = 5;
echo "Mora biti 5: " . $a -- . "
\n" ;

\n" ;

Jeka "

Dekrement prefiksa

" ;
$a = 5;
echo "Mora biti 4: " . -- $a . "
\n" ;
echo "Mora biti 4: " . $a . "
\n" ;
?>

Operacije nizova

PHP ima dva operatora za rad sa stringovima. Prvi je operator ulančavanja ("."), koji vraća ulančavanje lijevog i desnog argumenta. Drugi je operator dodjele s ulančavanjem, koji dodaje desni argument lijevom. Navedimo konkretan primjer:

$a = "Zdravo" ;
$b = $a. "Svijet!" ; // $b sadrži niz "Hello World!"

$a = "Zdravo" ;
$a .= "Svijet!" ; // $a sadrži niz "Hello World!"
?>

Bitove operacije

Ove su operacije osmišljene za rad (postavljanje/isključivanje/provjeru) grupa bitova u cijeloj varijabli. Bitovi cijelog broja nisu ništa više od pojedinačnih znamenki istog broja zapisanog u binarnom brojevnom sustavu. Na primjer, u binarnom sistemu broj 12 bi izgledao kao 1100, a 2 bi izgledao kao 10, tako da izraz 12|2 će nam vratiti broj 14 (1110 u binarnom zapisu). Ako varijabla nije cijeli broj, onda jest
prvo zaokruženo, a zatim se na njega primjenjuju sljedeći operatori.

Za predstavljanje jednog broja koriste se 32 bita:

  • 0000 0000 0000 0000 0000 0000 0000 0000 je nula;
  • 0000 0000 0000 0000 0000 0000 0000 0001 je 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 je 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 je 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 je 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 je 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 je 15;

Bitovi operatori:

Primjer Ime Proizlaziti
$a i $b Bitno "i" Postavljeni su samo oni bitovi koji su postavljeni u $a i $b.
$a | $b Bitno "ili" Oni bitovi koji su postavljeni u $a ili $b su postavljeni.
$a^$b Ekskluzivno ili Postavljeni su samo oni bitovi koji su postavljeni samo u $a ili samo u $b
~$a Negacija Oni bitovi koji nisu postavljeni u $a su postavljeni, i obrnuto.
$a<< $b Pomak ulijevo Svi bitovi varijable $a pomaknuti su $b pozicija ulijevo (svaka pozicija implicira "množenje sa 2")
$a >> $b Pomak udesno Svi bitovi varijable $a pomaknuti su $b pozicija udesno (svaka pozicija implicira "dijeljenje s 2")

Operacije usporedbe

Operatori usporedbe, kao što im ime govori, omogućuju usporedbu dviju vrijednosti.

Ovo su jedinstvene operacije na svoj način jer, bez obzira na vrstu svojih argumenata, uvijek vraćaju jednu od dvije stvari: lažno ili pravi. Operacije usporedbe uspoređuju dvije vrijednosti jedna s drugom i, ako je uvjet istinit, vraćaju pravi, A ako ne - lažno.

PHP dopušta samo usporedbu skalarnih varijabli. Nizovi i objekti ne mogu se uspoređivati ​​u PHP-u. Ne mogu se čak ni usporediti radi jednakosti (pomoću operatora ==), ali PHP ne izdaje upozorenje prilikom izvođenja takve operacije. Dakle, nakon što smo se jednom zapitali zašto dva potpuno različita niza kada ih uspoređujemo == iznenada ispadne isto, zapamtite da se prije usporedbe oba operanda pretvaraju u riječ niz, koji se zatim uspoređuje.

Pojedinosti potražite u usporedbi polja.

Operatori usporedbe:

Primjer Ime Proizlaziti
$a == $b Jednako PRAVI ako je $a jednako $b.
$a === $b Identično jednaki PRAVI ako je $a jednako $b i ima isti tip. (Dodano u PHP 4)
$a != $b Nejednak PRAVI ako $a nije jednako $b.
$a<>$b Nejednak PRAVI ako $a nije jednako $b.
$a !== $b Identično nije jednako PRAVI ako $a nije jednako $b ili ako su različitih vrsta (Dodano u PHP 4)
$a< $b Manje PRAVI ako je $a strogo manje od $b.
$a > $b Više PRAVI ako je $a strogo veće od $b.
$a<= $b Manje ili jednako PRAVI ako je $a manje ili jednako $b.
$a >= $b Više ili jednako PRAVI ako je $a veće ili jednako $b.

Logičke operacije

Logički operatori dizajnirani su isključivo za rad s Booleovim izrazima i također za return lažno ili pravi.

Evo tablice PHP logičkih operatora:

Treba napomenuti da se procjena logičkih izraza koji sadrže takve operatore uvijek odvija slijeva nadesno, a ako je rezultat već očigledan (npr. lažno&&nešto uvijek daje lažno), tada se izračuni prekidaju, čak i ako izraz sadrži pozive funkcija. Na primjer, u operatoru $logic = 0&&(time()>100); standardna funkcija vrijeme() nikada neće biti pozvan.

Budite oprezni s logičkim operacijama - ne zaboravite na udvostručenje znakova. Imajte na umu da, na primjer, | I || - dva potpuno različita operatora, od kojih jedan potencijalno može vratiti bilo koji broj, a drugi - samo lažno I pravi.

Operatori povećanja (++) i smanjenja (--) ne rade s Booleovim varijablama.

Operatori ekvivalencije

U PHP-u, počevši od PHP4 postoji identičan operator usporedbe - trostruki znak jednakosti === ,
ili operater provjere. PHP je prilično tolerantan prema nizovima koji se implicitno pretvaraju u brojeve, i obrnuto.
Na primjer, sljedeći kod će ispisati da su vrijednosti varijabli jednake:

$a=10;
$b="10";

I to unatoč činjenici da varijabla $a predstavlja broj i $b- crta. Sada pogledajmo nešto drugačiji primjer:

$a=0; // nula
$b=""; // prazan red
if($a==$b) echo "a i b su jednaki"; // Ispisuje "a i b su jednaki"

Iako $a I $b očito nisu jednaki čak ni u uobičajenom smislu riječi, scenarij će objaviti da su isti. Zašto se ovo događa? Poanta je da ako se jedan od operanda logičkog operatora može interpretirati kao broj, tada se oba operanda tretiraju kao brojevi. U tom se slučaju prazna linija pretvara u 0 , koji se zatim uspoređuje s nulom. Nije iznenađujuće da operater jeka djela.
Problem se rješava operatorom ekvivalencije === (trostruka jednakost). Ne uspoređuje samo dva izraza, već i njihove vrste. Prepišimo naš primjer koristeći ovaj operator.

reci prijateljima