Podział modulo PHP. PHP: Operatory arytmetyczne. Operacje zwiększania i zmniejszania

💖 Podoba Ci się? Udostępnij link swoim znajomym

Programiści, którzy muszą wykonywać wrażliwe obliczenia numeryczne, naukowe lub statystyczne, prawdopodobnie nie uznają języka skryptowego sieci Web za akceptowalnego kandydata do tej roli. Ale pomimo powyższego język PHP oferuje doskonały zestaw funkcji, które całkowicie rozwiązują większość problemów matematycznych pojawiających się w procesie wykonywania skryptów dla Internetu. Ponadto PHP zapewnia bardziej zaawansowane możliwości, takie jak arytmetyka o dowolnej precyzji, biblioteki mieszające i biblioteki kryptograficzne.

Twórcy języka PHP przyjęli uzasadnione podejście i nie podjęli żadnej próby ponownego wynalezienia kół przeznaczonych do tego celu. Faktem jest, że wiele z najbardziej podstawowych funkcji matematycznych używanych w PHP to po prostu opakowania wokół ich odpowiedników w C.

Operacje matematyczne

Większość matematyki w PHP jest wykonywana w formie wbudowanych funkcji, a nie operacji. Oprócz operatorów porównania PHP oferuje pięć prostych operatorów arytmetycznych, a także kilka operatorów skrótów, które pozwalają konstruować krótsze wyrażenia inkrementacji, dekrementacji i przypisania.

Działania arytmetyczne

Pięć podstawowych operacji arytmetycznych obejmuje te powszechnie stosowane w każdym czterofunkcyjnym kalkulatorze plus modulo (%). Krótki opis operacji arytmetycznych znajduje się w tabeli:

Działania arytmetyczne
Operacja Opis
+ Zwraca sumę wartości jego dwóch operandów
- Jeśli istnieją dwa operandy, wartość prawego operandu jest odejmowana od wartości lewego. Jeśli istnieje tylko operand po prawej stronie, operacja zwraca wartość tego operandu z przeciwnym znakiem
* Zwraca iloczyn wartości jego dwóch operandów
/ Zwraca zmiennoprzecinkowy wynik podzielenia wartości lewego operandu przez wartość prawego operandu
% Zwraca resztę liczby całkowitej podzieloną przez wartość lewego operandu i wartość bezwzględną prawego operandu

Korzystając z trzech pierwszych opisanych powyżej operacji arytmetycznych (+, -, *) w programie należy wziąć pod uwagę, że podczas wykonywania tych operacji następuje propagacja typu z wartości zmiennoprzecinkowych podwójnej precyzji na wartości całkowite. Oznacza to, że jeśli oba operandy operacji są liczbami całkowitymi, wówczas wynik jest liczbą całkowitą, a jeśli co najmniej jeden z operandów jest liczbą zmiennoprzecinkową podwójnej precyzji, wówczas wynikiem jest liczba zmiennoprzecinkowa podwójnej precyzji numer. Propagacja tego samego typu ma miejsce podczas wykonywania operacji dzielenia; ponadto istnieje dodatkowy efekt polegający na tym, że wynik staje się liczbą zmiennoprzecinkową o podwójnej precyzji, jeśli dzielenie nie zostanie przeprowadzone bez reszty (w całości).

Operacja modulo (%) w PHP akceptuje operandy całkowite i gdy ta operacja jest stosowana do liczb zmiennoprzecinkowych podwójnej precyzji, liczby te są najpierw konwertowane na liczby całkowite (poprzez odrzucenie części ułamkowej). Wynikiem takiej operacji jest zawsze liczba całkowita.

Operacje zwiększania i zmniejszania

Duża część składni PHP wywodzi się z C, a programiści C są znani ze swojego zamiłowania do zwięzłości i są z tego dumni. Operatory inkrementacji i dekrementacji zaczerpnięte z języka C umożliwiają bardziej zwięzłe przedstawienie wyrażeń takich jak $count = $count + 1, które zwykle dość często można znaleźć w programach.

Operator inkrementacji (++) służy do dodania jeden do wartości zmiennej, na którą wpływa operacja, natomiast operator dekrementacji (--) odejmuje jeden od wartości zmiennej.

Każda z tych dwóch operacji ma dwie odmiany - przyrostek(w tej formie znak operacji umieszcza się bezpośrednio po zmiennej, na którą wpływa operacja) i prefiks(w tej postaci znak operacji umieszcza się bezpośrednio przed zmienną, której dotyczy operacja). Obydwa mają ten sam efekt uboczny zmiany wartości zmiennej, ale operatory sufiksów i przedrostków zwracają różne wartości, gdy są używane jako wyrażenia. Operacja sufiksowa działa w ten sposób, że wartość zmiennej zmienia się po zwróceniu wartości wyrażenia, a operacja przedrostkowa działa w ten sposób, że najpierw zmieniana jest wartość, a następnie do zmiennej zwracana jest nowa wartość. Różnicę tę można wykryć za pomocą operatorów zmniejszania i zwiększania w operatorach przypisania:

Kod PHP $liczba = 0; $wynik = $liczba++; echo "Wynik przyrostu $count++: ".$result."
"; $count = 0; $result = ++$count; echo "Wynik zwiększenia liczby ++$: ".$result."
";

Poniższe instrukcje dają następujące dane wyjściowe w oknie przeglądarki:

Operacje przyrostowe

W tym przykładzie operator $result = $count++ jest całkowicie równoważny operatorom:

Kod PHP $wynik = $liczba; $liczba = $liczba + 1;

Oprócz tego operator $result = ++$count jest równoważny następującym operatorom:

Kod PHP $liczba = $liczba +1; $wynik = $liczba;

Operatory przypisania

Operatory inkrementacji (i dekrementacji) zmniejszają ilość kodu potrzebnego do dodania jedynki do wartości zmiennej, ale nie zmniejszają ilości kodu, który przypisuje zmiennej wynik dodania jej wartości do innej liczby lub wyniku innych operacji arytmetycznych . Na szczęście wszystkim pięciu operatorom arytmetycznym odpowiadają operatory przypisania (+=, -=, *=, /= i %=), które umożliwiają przypisanie wyniku operacji arytmetycznej na wartości tej zmiennej do zmiennej w jednym krótkie wyrażenie. Na przykład operatora

Kod PHP $count = $count * 3;

można skrócić jako

Kod PHP $count *= 3;

Proste funkcje matematyczne

Następnym krokiem w uczynieniu programu bardziej złożonym niż ten, który wykorzystuje wyłącznie operacje arytmetyczne, jest użycie wszelkiego rodzaju funkcji. Funkcje umożliwiają wykonywanie takich zadań, jak konwersja jednego typu liczb na inny (zobacz artykuł Typy danych) i znajdowanie minimalnej lub maksymalnej liczby w zbiorze liczb. Poniższa tabela przedstawia proste funkcje matematyczne:

Proste funkcje matematyczne PHP
Funkcjonować Opis
podłoga() Pobiera pojedynczy rzeczywisty parametr (zwykle liczbę zmiennoprzecinkową o podwójnej precyzji) i zwraca największą liczbę całkowitą, która jest mniejsza lub równa rzeczywistemu parametrowi (zaokrąglona w dół)
stropować() Nazwa tej funkcji jest skrótem od słowa sufit. Funkcja pobiera pojedynczy parametr rzeczywisty (zwykle liczbę zmiennoprzecinkową o podwójnej precyzji) i zwraca najmniejszą liczbę całkowitą większą lub równą temu rzeczywistemu parametrowi (zaokrąglając w górę)
okrągły() Pobiera pojedynczy rzeczywisty parametr (zwykle liczbę zmiennoprzecinkową o podwójnej precyzji) i zwraca najbliższą liczbę całkowitą
abs() Wartość bezwzględna liczby. Jeśli jedyny rzeczywisty parametr liczbowy ma wartość ujemną, funkcja zwraca odpowiednią liczbę dodatnią; jeśli rzeczywisty parametr jest dodatni, funkcja sama zwraca rzeczywisty parametr
min() Akceptuje dowolną liczbę liczbowych parametrów rzeczywistych (ale co najmniej jeden) i zwraca najmniejszą ze wszystkich rzeczywistych wartości parametrów
maks.() Akceptuje dowolną liczbę liczbowych parametrów rzeczywistych (ale nie mniej niż jeden) i zwraca największą ze wszystkich rzeczywistych wartości parametrów

Na przykład wynikiem poniższego wyrażenia jest 3, ponieważ wartość każdego wyrażenia wywołania funkcji również wynosi 3:

Kod PHP $wynik = min(3, abs(-3), max(okrągły(2,7), ceil(2,3), podłoga(3,9)));

Generowanie liczb losowych

Język PHP wykorzystuje dwa generatory liczb losowych (wywoływane odpowiednio za pomocą funkcji skraj() I mt_rand()). Z każdym z tych generatorów powiązane są trzy funkcje o tym samym przeznaczeniu: funkcja ustawiania wartości początkowej ( srand() I mt_srand()), samą funkcję uzyskiwania liczby losowej oraz funkcję próbkującą największą liczbę całkowitą, jaką może zwrócić generator (( getrandmax() I mt_getrandmax())). Funkcje getrandmax() i mt_getrandmax() zwracają największą liczbę, jaką może zwrócić funkcja Rand() lub mt_rand(), która na platformach Windows jest ograniczona do 32768.

Wybór konkretnej funkcji generowania liczb pseudolosowych używanej w funkcji Rand() może zależeć od bibliotek, z których skompilowano interpreter PHP. Natomiast generator mt_rand() wykorzystuje zawsze tę samą funkcję generowania liczb pseudolosowych (mt to skrót od Mersenne Twister), a autor dokumentacji operacyjnej funkcji mt_rand() twierdzi, że funkcja ta jest także szybsza i „więcej random” (z kryptograficznego punktu widzenia) niż Rand(). Nie mamy powodu wątpić w prawdziwość tych stwierdzeń, dlatego wolimy używać funkcji mt_rand() niż Rand().

Podczas używania niektórych wersji PHP na niektórych platformach wydaje się, że funkcje Rand() i mt_rand() generują pozornie rozsądne liczby losowe, nawet bez uprzedniego ustawienia ziarna. Ale takiemu wrażeniu nie należy ufać. Po pierwsze, programów korzystających z funkcji generowania liczb losowych bez podania wartości początkowej nie da się łatwo przenieść na inne platformy, po drugie, nie gwarantuje się niezawodnego działania tych funkcji bez określenia wartości początkowej.

Typowy sposób ustawienia wartości początkowej dla dowolnego generatora liczb losowych PHP (za pomocą funkcji mt_srand() lub srand()) jest następujący:

Kod PHP mt_srand((podwójny)mikrotime()*1000000);

Operator ten ustawia wartość początkową generatora, równą liczbie mikrosekund, które upłynęły do ​​tego czasu od naliczenia ostatniej pełnej sekundy. (Rzutowanie na double w tej instrukcji jest właściwie konieczne, ponieważ funkcja microtime() zwraca ciąg znaków, który jest traktowany jako liczba całkowita w operacji mnożenia, ale nie w operacji przekazywania parametrów do funkcji.) Zalecamy, aby czytelnik wprowadził określony operator inicjalizacji, nawet jeśli cel tego operatora nie jest dla niego całkowicie jasny; Wystarczy, że raz umieścisz tę instrukcję na każdej stronie PHP, przed użyciem odpowiedniej funkcji mt_rand() lub Rand(), a punkt początkowy ulegnie zmianie i dlatego za każdym razem powstanie inna losowa sekwencja.

Ta konkretna metoda ustawiania wartości początkowej została głęboko przemyślana przez specjalistów, którzy w pełni rozumieją wszystkie niuanse generowania liczb pseudolosowych, dlatego najprawdopodobniej na zawsze pozostanie lepsza niż jakiekolwiek próby wymyślenia czegoś przez jakiegokolwiek indywidualnego programistę bardziej „trudne”.

Oczywiście te funkcje generujące liczby pseudolosowe zwracają tylko liczby całkowite, ale losową liczbę całkowitą z danego zakresu można łatwo przekonwertować na odpowiednią liczbę zmiennoprzecinkową (powiedzmy liczbę z zakresu od 0,0 do 1,0 włącznie) za pomocą wyrażenia takiego jak rand () / getrandmax(). Określony zakres można następnie skalować i przesuwać w razie potrzeby. Poniżej znajduje się przykład:

Kod PHP // Załóżmy, że musimy wygenerować liczbę losową od 100,0 do 120,0 $random = 100,0 + 20,0 * mt_rand() / mt_getrandmax(); echo $losowe.”
"; // Generuj liczby całkowite (100 - 120); echo round($random);

Spróbuj kilka razy odświeżyć stronę tym kodem, aby mieć pewność, że wygenerowane zostaną liczby losowe.

Stałe matematyczne

W PHP w wersji 4.0 w dokumentacji opisana była tylko jedna stała matematyczna - M_PI (wartość π, reprezentowana jako liczba zmiennoprzecinkowa o podwójnej precyzji). Począwszy od PHP 4.0.2 wprowadzono wiele nowych stałych. Większość tych nowych stałych dotyczy π (lub jego wielokrotności), e (lub jego wielokrotności) i pierwiastków kwadratowych; ponadto niektóre stałe należały do ​​innych typów. Jednak w kolejnych wydaniach z wielu powodów lista stałych została ponownie zredukowana do stosunkowo niewielkiej liczby predefiniowanych stałych matematycznych:

Stałe matematyczne PHP
Stały Opis
M_PI π
M_PI_2 π/2
M_PI_4 π/4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / kwadrat(π)
JA mi
M_SQRT2 kwadrat(2)
M_SQRT1_2 1 / kwadrat(2)
M_LOG2E log2(e)
M_LOG10E log(e)
M_LN2 loża(2)
M_LN10 loża(10)

Sprawdzanie formatu liczb

Język PHP udostępnia szereg funkcji pozwalających sprawdzić poprawność reprezentacji liczb. Chociaż w PHP nie ma ścisłego sprawdzania typów, zaleca się zaimplementowanie niektórych z tych kontroli w kodzie, jeśli jest to konieczne, aby móc przewidzieć charakterystykę otrzymywanych wyników, a także wybrać najlepszy sposób ich obsługi.

Pierwszym i najprostszym sprawdzeniem jest użycie funkcji is_numeric(). Podobnie jak w przypadku większości innych tego typu testów, funkcja is_numeric zwraca wynik logiczny - true, jeśli przekazanym do niej parametrem są dane numeryczne dowolnego typu (ze znakiem lub bez znaku, liczba całkowita lub zmiennoprzecinkowa) lub wyrażenie matematyczne zwracające prawidłową wartość liczbową.

Korzystanie z funkcji is_int() I is_float Możesz określić, czy liczba jest liczbą całkowitą, czy ułamkiem. Dwie kolejne kontrole są nieco bardziej złożone: funkcje jest_skończony() I jest_nieskończony() pozwalają wykonać dokładnie te testy, na które wskazują ich nazwy (niezależnie od tego, czy liczba jest skończona, czy nieskończona). Ale ściśle rzecz biorąc, zakres wartości, na który rozciągają się te funkcje, nie może obejmować rzeczywistej nieskończoności (a czy w ogóle można sprawdzić, czy liczba ma nieskończenie dużą wartość?). Zamiast tego stosowane są ograniczenia zakresu wartości zmiennoprzecinkowych dozwolonych w danym systemie.

Poniżej znajduje się przykład użycia tych funkcji:

Kod PHP is_numeric(4); // prawda is_numeric(25 - 6); // prawda is_numeric("25"); // true is_numeric("25 - 6"); // fałsz is_int(4); // prawda is_int(4.2); // fałsz is_int("4"); // false – to sprawdzenie jest bardziej rygorystyczne niż sprawdzenie przy użyciu funkcji is_numeric() is_float(4); // fałsz is_float(4.0); // prawda is_float(M_PI); // PRAWDA

Konwersja systemów liczbowych

Domyślnie PHP używa podstawy 10 do konwersji wartości liczbowych z reprezentacji zewnętrznej na wewnętrzną do przodu i do tyłu. Możesz także powiedzieć interpreterowi PHP, że reprezentacja zewnętrzna używa liczb ósemkowych o podstawie 8 (w tym celu musisz wprowadzić początkowe 0). ) lub liczby szesnastkowe określone w podstawie 16 (w tym celu należy poprzedzić liczbę 0x).

Oczywiście po konwersji liczb z reprezentacji zewnętrznej na wewnętrzną, są one zapisywane w pamięci w formacie binarnym, a wszystkie podstawowe obliczenia arytmetyczne i matematyczne przeprowadzane są w samym systemie operacyjnym w bazie 2. Dodatkowo język PHP udostępnia szereg funkcji umożliwiających konwersję liczb z jednej podstawy systemu liczenia na inną. Przegląd tych funkcji znajduje się w poniższej tabeli:

Funkcje konwersji systemu liczbowego
Funkcjonować Opis
BinDec() Pobiera pojedynczy parametr w postaci ciągu znaków, który jest binarną liczbą całkowitą (liczba o podstawie 2) i zwraca 10-ciągową reprezentację tej liczby
DecBin() Podobny do BinDec(), ale konwertuje z podstawy 10 na podstawę 2
paź grudzień() Podobny do BinDec(), ale konwertuje z podstawy 8 na podstawę 10
Warzyć() Podobny do BinDec(), ale konwertuje z podstawy 10 na podstawę 8
HexDec() Podobny do BinDec(), ale konwertuje z podstawy 16 na podstawę 10
DecHex() Podobny do BinDec(), ale konwertuje z podstawy 10 na podstawę 16
base_convert() Akceptuje parametr łańcuchowy (reprezentujący liczbę całkowitą do przekonwertowania) i dwa parametry całkowite (oryginalny i żądaną podstawę). Zwraca ciąg reprezentujący przekonwertowaną liczbę. W tym wierszu liczby większe niż 9 (10 do 35) są reprezentowane przez znaki a-z. Zarówno oryginalna, jak i pożądana baza musi mieścić się w zakresie 2-36

Wszystkie funkcje konwersji systemów liczbowych są funkcjami specjalnego przeznaczenia, które konwertują liczby z jednej określonej podstawy na inną. Wyjątkiem jest funkcja base_convert(), która przyjmuje dowolne parametry wskazujące bazę początkową i wynikową.

Należy pamiętać, że wszystkie funkcje konwersji systemów liczbowych akceptują parametry łańcuchowe i zwracają wartości łańcuchowe, ale można używać dziesiętnych parametrów numerycznych i polegać na interpreterze PHP, aby poprawnie przeprowadzić konwersję typów. Innymi słowy, zarówno DecBin("1234"), jak i DecBin(1234) dają ten sam wynik.

Potęgi i logarytmy

Język PHP zawiera standardowe funkcje wykładnicze i logarytmiczne w dwóch odmianach - do pracy w systemie o podstawie 10 i o podstawie e (które pokazano w tabeli).

PHP udostępnia funkcję exp() do podniesienia e do danej potęgi, ale nie ma jednoparametrowej funkcji podnoszącej 10 do danej potęgi. Można jednak zamiast tego użyć funkcji pow(), która przyjmuje dwa parametry i daje 10 jako pierwszy parametr.

Można sprawdzić, czy funkcje wykładnicze i logarytmiczne o tej samej podstawie są względem siebie odwrotne, sprawdzając identyczność otrzymanych w ten sposób wyników:

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

Funkcje trygonometryczne

Język PHP udostępnia standardowy zestaw podstawowych funkcji trygonometrycznych, o których ogólne informacje podano w tabeli:

Funkcje trygonometryczne
Funkcjonować Opis
Liczba Pi() Nie przyjmuje żadnych parametrów i zwraca przybliżoną wartość π (3,1415926535898). Można używać zamiennie ze stałą M_PI
grzech() Akceptuje parametr numeryczny w radianach i zwraca sinus parametru jako liczbę zmiennoprzecinkową o podwójnej precyzji
sałata() Pobiera parametr liczbowy w radianach i zwraca cosinus parametru w postaci liczby zmiennoprzecinkowej o podwójnej precyzji
dębnik() Akceptuje parametr numeryczny w radianach i zwraca tangens parametru jako liczbę zmiennoprzecinkową o podwójnej precyzji
jak w() Pobiera parametr numeryczny i zwraca arcus sinus parametru w radianach. Wejścia muszą mieścić się w przedziale od -1 do 1 (funkcja odbierająca dane wejściowe spoza tego zakresu daje wynik NAN). Wyniki wahają się od -π/2 do π/2
acos() Pobiera parametr numeryczny i zwraca arcus cosinus parametru w radianach. Wejścia muszą mieścić się w przedziale od -1 do 1 (funkcja odbierająca wejścia spoza tego zakresu daje wynik NAN. Wyniki mieszczą się w przedziale od 0 do π
atan() Pobiera parametr numeryczny i zwraca arcus tangens parametru w radianach. Wyniki wahają się od -π/2 do π/2

Poniżej znajduje się przykład zestawienia tabeli do obliczania funkcji trygonometrycznych dla „standardowych” kątów:

Kod PHP funkcja display_trigonometry($func_array, $input_array) ( // echo nagłówka funkcji " "; ) Echo ""; // Wydrukuj resztę tabeli foreach($input_array jako $input) ( echo " "; foreach($func_array as $func) ( echo " "; ) Echo ""; ) Echo "
Znaczenie/funkcja$funkcja
".sprintf("%.4f",$wejście).""; printf("%4.4f", $funkcja($wejście)); echo "
"; ) display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Przykład wykorzystania funkcji trygonometrycznych w PHP

Powodem uzyskania bardzo dużych (ale nie nieskończonych) wartości stycznych jest to, że mianowniki teoretycznie powinny wynosić zero, ale w rzeczywistości nieznacznie różnią się od zera ze względu na błędy zaokrągleń.

Obliczenia z dowolną precyzją (przy użyciu funkcji BC)

Typy zmiennoprzecinkowe całkowitej i podwójnej precyzji są całkowicie odpowiednie w przypadku większości problemów matematycznych napotykanych w skryptach internetowych, ale każde wystąpienie wartości reprezentowanej przez te typy wymaga stałej ilości pamięci komputera, więc rozmiar i precyzja reprezentacji liczbowej tych typów nieuchronnie narzucają ograniczenia.

Oczywiście dokładne zakresy wartości tych typów danych mogą zależeć od architektury serwera, ale wartości całkowite mogą zazwyczaj mieścić się w przedziale od -2 31 -1 do 2 31 -1, a liczby zmiennoprzecinkowe podwójnej precyzji mogą reprezentują liczby z dokładnością od około 13 do 14 cyfr dziesiętnych. Z drugiej strony, aby rozwiązać problemy wymagające zastosowania szerszego zakresu reprezentacji lub większej precyzji, PHP zapewnia funkcje matematyczne o dowolnej precyzji(zwane także funkcjami BC, nazwane na cześć narzędzia obliczeniowego o dowolnej precyzji opartego na systemie Unix).

Może się zdarzyć, że w kompilacji interpretera PHP nie zostaną uwzględnione funkcje o dowolnej precyzji, zwłaszcza jeśli użytkownik dokonał kompilacji samodzielnie, gdyż w tym celu użytkownik musiałby wiedzieć, że na etapie konfiguracji konieczne jest umieszczenie pola wyboru w parametry --włącz-bcmath. Aby sprawdzić, czy określone funkcje są dostępne, spróbuj ocenić wyrażenie bcadd("1","1"). Jeśli pojawi się komunikat o błędzie informujący o niezdefiniowanej funkcji, będziesz musiał ponownie skonfigurować interpreter PHP i ponownie go skompilować.

Funkcje BC używają ciągów znaków, a nie typów liczbowych o stałej długości jako parametrów i wartości zwracanych. Ponieważ w PHP długość ciągów jest ograniczona jedynie ilością dostępnej pamięci, liczby używane w obliczeniach mogą mieć dowolną długość. Podstawowe obliczenia są wykonywane w formie dziesiętnej i przypominają te, które można wykonać za pomocą ołówka i papieru (jeśli potrafi pracować bardzo szybko i jest cierpliwy). Funkcje całkowite BC są precyzyjne i pozwalają na użycie dowolnej liczby cyfr, natomiast funkcje zmiennoprzecinkowe wykonują obliczenia z dokładnością do określonej liczby miejsc po przecinku. Ogólne informacje na temat funkcji BC znajdują się w poniższej tabeli:

Funkcje matematyczne o dowolnej precyzji (funkcje BC)
Funkcjonować Opis
bcadd() Akceptuje dwa parametry łańcuchowe reprezentujące liczby i opcjonalny parametr całkowity wskazujący współczynnik skali. Zwraca sumę dwóch pierwszych parametrów w postaci ciągu znaków, przy czym liczba miejsc dziesiętnych w wyniku jest określona przez parametr wskazujący współczynnik skali. Jeżeli nie podano parametru wskazującego współczynnik skali, wówczas stosowany jest domyślny współczynnik skali
bcsub() Podobna do bcadd(), z tą różnicą, że zwraca wynik odjęcia drugiego parametru od pierwszego
bcmui() Podobna do bcadd(), z tą różnicą, że zwraca wynik mnożenia jej parametrów
bcdiv() Podobna do bcadd(), z tą różnicą, że zwraca wynik podzielenia pierwszego parametru przez drugi
bcmmod() Zwraca moduł (resztę) z dzielenia pierwszego parametru przez drugi. Ponieważ wartością zwracaną jest liczba całkowita, funkcja nie akceptuje parametru wskazującego współczynnik skali
bcpow() Podnosi pierwszy parametr do potęgi określonej przez drugi parametr. Liczbę miejsc po przecinku w wyniku określa współczynnik skali, jeśli jest określony
bcsqrt() Zwraca pierwiastek kwadratowy parametru z liczbą miejsc po przecinku określoną przez wartość opcjonalnego współczynnika skali
bcscale() Ustawia domyślny współczynnik skali dla kolejnych wywołań funkcji BC

Większość tych funkcji przyjmuje jako ostatni parametr opcjonalny współczynnik skali (liczbę całkowitą), który określa, ile miejsc po przecinku powinien mieć wynik. Jeśli ten parametr nie zostanie określony, jako współczynnik skali zostanie użyty domyślny współczynnik skali, który z kolei można ustawić wywołując funkcję bcscale(). Domyślną wartość tej wartości domyślnej (tzn. wartość używaną, jeśli skrypt nie wywołuje bcscale()) można także ustawić w pliku inicjującym php.ini.

Poniżej znajduje się przykład użycia funkcji dowolnej precyzji do dokładnego wykonywania operacji arytmetycznych na liczbach całkowitych. Wykonywanie następującego kodu:

Kod PHP dla ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Dokładne obliczanie wartości astronomicznych za pomocą funkcji BC

Jeśli do tych obliczeń użyto zwykłego typu całkowitego PHP, przepełnienie liczby całkowitej nastąpiłoby na długo przed zakończeniem obliczeń, więc reszta pętli wykonałaby obliczenia w celu uzyskania przybliżonej liczby zmiennoprzecinkowej.

Tablice Przetwarzanie formularzy 1 2 3 4 5 6 7 8 9 10

Operacje logiczne istnieją we wszystkich językach programowania i PHP nie jest wyjątkiem. Oprócz prostego dzielenia, mnożenia, dodawania lub odejmowania istnieją również dzielenie na liczby całkowite i resztę, o których teraz porozmawiamy, a także przeanalizujemy je na szczegółowych przykładach.

Dzielenie całkowite to wynik części całkowitej z dzielenia. Na przykład, jeśli podzielimy 5 przez 2, otrzymamy 2, a nie 2,5.

W przypadku podziału resztkowego wszystko jest inne. Jest to wynik reszty z dzielenia przez liczbę całkowitą. Na przykład dzieląc te same pięć, otrzymasz nie 2, ale 1, ponieważ dzieląc 5 przez 2, otrzymamy 2, a reszta to 1.

Jak wykonać dzielenie liczb całkowitych w PHP

Na przykład w Pythonie podział ten odbywa się za pomocą prostego operatora: „//”.

A w PHP nie będzie to takie proste, ale i tak proces nie wymaga super znajomości języka.

Podajmy przykład, jak można to wdrożyć.

W siódmej wersji PHP funkcja wygląda następująco:

W starszej wersji ta sama funkcja wygląda następująco:

Istnieje również metoda dla wszystkich wersji:

Jak aplikować?

Weźmy na przykład pierwszą funkcję, wszystkie pozostałe wykonuje się w przybliżeniu w ten sam sposób.

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

Dzielenie reszty w PHP

Aby wyświetlić resztę z dzielenia w PHP, po prostu użyj operatora „%”.

$i = 10% 3; echo $i;

Jak widzimy, wszystko jest dość proste i nie wymaga długich wyjaśnień.

Gdzie można go zastosować?

Znajomość dzielenia liczb całkowitych w PHP będzie bardzo przydatna, jeśli będziesz musiał porównać dwie liczby, utworzyć liczbę odwróconą (popularne ćwiczenie) lub np. Program o nazwie FizzBuzz. Jego istota polega na tym, że trzeba napisać cykl od 1 do 100, który dzieli każdą liczbę przez 3 i 5. Jeśli liczba podzielona przez 3 ma resztę 0, to piszemy Fizz, przy dzieleniu przez 5, następnie Buzz i jeśli po podzieleniu 5 i 3 reszta wynosi 0, wówczas piszemy FizzBuzz. To bardzo popularne zadanie na rozmowie kwalifikacyjnej. Jeśli sam go ukończyłeś, możesz być z siebie dumny.

Lub na przykład musimy wyprowadzić wszystkie jego liczby (4, 5, 2) z liczby 452.

Wniosek

Oczywiście dzielenie liczb całkowitych i reszt jest przydatne i dość powszechne; nie są tak wygodne w użyciu jak w Pythonie, ale nadal są ważne.

Jesteś teraz o krok bliżej do nauki języka programowania PHP, a w przyszłości będziesz jeszcze bliżej, jeśli będziesz równie ciężko pracować, aby pokonać wyzwania.

Wszystkie podstawowe operacje matematyczne są dostępne w PHP. Jako operandy można używać zarówno liczb całkowitych, jak i liczb rzeczywistych.

Tabela przedstawia listę operatorów arytmetycznych:
OperatorPodpisaćOpis
Dodatek + Dodanie dwóch wartości
Odejmowanie - Odejmowanie jednej wartości od drugiej
Mnożenie * Mnożenie dwóch wartości
Dział / Dzielenie jednej wartości przez drugą
Uzyskanie reszty z dzielenia % Dzielenie jednej wartości przez drugą i zwracanie reszty (dzielenie modulo)
Przyrost ++ Skrót oznaczający zwiększenie liczby o jeden
Zmniejszenie -- Skrót oznaczający zmniejszenie liczby o jeden
Jednoargumentowa negacja - Zamiana liczby dodatniej na ujemną lub liczby ujemnej na dodatnią

Operatory odejmowania, mnożenia, dzielenia, modulo i dodawania

Operatorów odejmowania, mnożenia, dzielenia, modulo i dodawania używa się w taki sam sposób, jak w matematyce. Warto tutaj zwrócić uwagę na operatory dzielenia i modulo.

Operator dzielenia („ / ”) zwraca liczbę zmiennoprzecinkową, chyba że obie wartości są liczbami całkowitymi (lub ciągami znaków konwertowanymi na liczby całkowite), które są podzielone przez liczbę całkowitą, w takim przypadku zwraca wartość całkowitą.

wynik2 = $wynik2
"; echo "wynik3 = $wynik3
wynik4 = $wynik4"; ?>

W dzieleniu modulo operandy są konwertowane na liczby całkowite (z usunięciem części ułamkowej) przed rozpoczęciem operacji. Wynik operacji dzielenia reszty % będzie miał ten sam znak co dywidenda:

Jednoargumentowa negacja

Jednoargumentowy operator negacji jest oznaczony znakiem „-” i odwraca znaczenie jego jedynego operandu:

W tym przypadku nawiasy nie są potrzebne, ponieważ jednoargumentowa negacja ma najwyższy priorytet, ale pomagają uporządkować kod tak, aby było jasne, że liczby -5 i 4 są dodawane.

Przyrost

Operator inkrementacji jest oznaczony znakiem ++ i może być umieszczony po obu stronach operandu, na którym działa. Zwiększa tę wartość o jeden, podobnie jak dodanie jedynki do wartości. Rzeczywisty wynik zależy od tego, czy operator został zastosowany przed czy po operandie, z którym został zastosowany. Operator ten jest często używany ze zmiennymi i często dzieje się to wewnątrz pętli (pętle zostaną omówione później).

Przedrostkowa forma przyrostu

Formularz przedrostka- ma to miejsce wtedy, gdy operator inkrementacji jest umieszczony przed operandem, ta forma zapisu oznacza, że ​​inkrement zostanie wykonany jako pierwszy: zwiększa wartość argumentu o jeden i dopiero wtedy wykonywana jest dalsza część instrukcji:

Postfiksowa forma przyrostu

Formularz postfiksowy jest zapisywany nieco inaczej - przyrost znajduje się w tym przypadku po operandzie. W notacji postfiksowej pierwsze użycie operandu zwraca jego aktualną wartość, dopiero potem wartość zostanie zwiększona o jeden:

Zmniejszenie

Operator zmniejszania jest oznaczony znakiem -- i w przeciwieństwie do operatora zwiększania zmniejsza, a nie zwiększa wartość swojego argumentu o jeden. Dekrementacja pozwala również na zapis przedrostkowy i postfiksowy:

Operacje logiczne istnieją we wszystkich językach programowania i PHP nie jest wyjątkiem. Oprócz prostego dzielenia, mnożenia, dodawania lub odejmowania istnieją również dzielenie na liczby całkowite i resztę, o których teraz porozmawiamy, a także przeanalizujemy je na szczegółowych przykładach.

Dzielenie całkowite to wynik części całkowitej z dzielenia. Na przykład, jeśli podzielimy 5 przez 2, otrzymamy 2, a nie 2,5.

W przypadku podziału resztkowego wszystko jest inne. Jest to wynik reszty z dzielenia przez liczbę całkowitą. Na przykład dzieląc te same pięć, otrzymasz nie 2, ale 1, ponieważ dzieląc 5 przez 2, otrzymamy 2, a reszta to 1.

Jak wykonać dzielenie liczb całkowitych w PHP

Na przykład w Pythonie podział ten odbywa się za pomocą prostego operatora: „//”.

I w PHP nie będzie to takie łatwe, ale mimo to proces ten nie wymaga super znajomości języka.

Podajmy przykład, jak można to wdrożyć.

W PHP Siódma wersja funkcji wygląda następująco:

Rozdzielcz();

W starszej wersji ta sama funkcja wygląda następująco:

Istnieje również metoda dla wszystkich wersji:

Podłoga();

Jak aplikować?

Weźmy na przykład pierwszą funkcję, wszystkie pozostałe wykonuje się w przybliżeniu w ten sam sposób.

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

Dzielenie reszty w PHP

Aby wyświetlić całkowitą resztę dzielenia w PHP Wystarczy użyć operatora „%”.

$i = 10% 3; echo $i;

Jak widzimy, wszystko jest dość proste i nie wymaga długich wyjaśnień.

Gdzie można go zastosować?

Znajomość dzielenia liczb całkowitych PHP będzie bardzo przydatny, jeśli będziesz musiał porównać dwie liczby, utworzyć liczbę odwróconą (popularne ćwiczenie) lub na przykład program o nazwie FizzBuzz. Jego istota polega na tym, że trzeba napisać cykl od 1 do 100, który dzieli każdą liczbę przez 3 i 5. Jeśli liczba podzielona przez 3 ma resztę 0, to piszemy Fizz, jeśli dzielimy przez 5, to Buzz i jeśli po podzieleniu 5 i 3 reszta wynosi 0, wówczas piszemy FizzBuzz. To bardzo popularne zadanie na rozmowie kwalifikacyjnej. Jeśli sam go ukończyłeś, możesz być z siebie dumny.

Lub na przykład musimy wyprowadzić wszystkie jego liczby (4, 5, 2) z liczby 452.

Wniosek

Oczywiście dzielenie liczb całkowitych i reszt jest przydatne i dość powszechne; nie są tak wygodne w użyciu jak w Pythonie, ale nadal są ważne.

Teraz jesteś o krok bliżej do nauki języka programowania PHP a w przyszłości staniecie się jeszcze bliżsi, jeśli równie pilnie pokonujecie trudności.

Operacje na zmiennych PHP (operatory)

Istnieją różne grupy wdrożeniowe.

Operator to coś składającego się z jednej lub więcej wartości (wyrażeń w żargonie programistycznym), które można ocenić jako nową wartość (zatem całą konstrukcję można uznać za wyrażenie). Wynika z tego, że funkcje lub inne konstrukcje zwracające wartość (na przykład wydrukować()) są operatorami, w przeciwieństwie do wszystkich innych konstrukcji językowych (na przykład Echo()), które nic nie zwracają.

Operacje arytmetyczne w PHP

Pamiętasz szkolne podstawy arytmetyki? Poniższe instrukcje działają w ten sam sposób.

Operator dzielenia („/”) zawsze zwraca typ rzeczywisty, nawet jeśli obie wartości były liczbami całkowitymi (lub ciągami znaków konwertowanymi na liczby całkowite). W przeciwnym razie wynik będzie ułamkowy.

Operacja obliczania reszty dzielenia " % " działa tylko z liczbami całkowitymi, zatem zastosowanie go do ułamków może dać niepożądane rezultaty.

Możliwe jest użycie nawiasów. Pierwszeństwo pewnych operacji matematycznych przed innymi i zmiana priorytetów podczas używania nawiasów w wyrażeniach arytmetycznych podlegają zwykłym zasadom matematyki.

Operacje zwiększania i zmniejszania

PHP, podobnie jak C, obsługuje operatory inkrementacji i dekrementacji przedrostków i postfiksów.

Operatory inkrementacji i dekrementacji przyrostkowej

Podobnie jak w C, operatory te zwiększają lub zmniejszają wartość zmiennej, a w wyrażeniu zwracają wartość zmiennej $a przed zmianą. Na przykład:

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

Jak widać, najpierw zmienna $b wartość przypisana do zmiennej $a i dopiero wtedy zwiększano ostatni. Jednakże wyrażenie, którego wartość jest przypisana do zmiennej $b, może być trudniej - w każdym razie przyrost $a nastąpi dopiero po jej obliczeniu.

Przedrostki operatorów inkrementacji i dekrementacji

Istnieją również operatory inkrementacji i dekrementacji, które są podawane zamiast po nazwie zmiennej. Odpowiednio zwracają wartość zmiennej po zmianie. Przykład:

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

Operacje inkrementacji i dekrementacji są stosowane bardzo często w praktyce. Na przykład występują w prawie każdym cyklu Do .

Echo "

Przyrost przyrostka

" ;
$a = 5;
echo "Musi być 5: " . $a++ . "
\N" ;

\N" ;

Echo "

Zwiększenie prefiksu

" ;
$a = 5;
echo "Musi być 6: " . ++ $a. "
\N" ;
echo "Musi być 6: " . $a. "
\N" ;

Echo "

Zmniejszenie przyrostka

" ;
$a = 5;
echo "Musi być 5: " . $a-. "
\N" ;

\N" ;

Echo "

Zmniejszanie prefiksu

" ;
$a = 5;
echo "Musi być 4: " . -- $a . "
\N" ;
echo "Musi być 4: " . $a. "
\N" ;
?>

Operacje na ciągach

PHP ma dwa operatory do pracy z ciągami znaków. Pierwszym z nich jest operator łączenia („.”), który zwraca połączenie lewego i prawego argumentu. Drugi to operator przypisania z konkatenacją, który dołącza prawy argument do lewego. Podajmy konkretny przykład:

$a = „Witam” ;
$b = $a. "Świat!" ; // $b zawiera ciąg „Hello World!”

$a = „Witam” ;
$a .= "Świat!" ; // $a zawiera ciąg „Hello World!”
?>

Operacje bitowe

Operacje te mają na celu operowanie (ustawianie/rozbrajanie/sprawdzanie) grup bitów w całej zmiennej. Bity liczby całkowitej to nic innego jak pojedyncze cyfry tej samej liczby zapisane w systemie liczb binarnych. Na przykład w systemie binarnym liczba 12 będzie wyglądać jak 1100, a 2 będzie wyglądać jak 10, więc wyrażenie 12|2 zwróci nam liczbę 14 (1110 w zapisie binarnym). Jeśli zmienna nie jest liczbą całkowitą, to nią jest
najpierw zaokrąglany, a następnie stosowane są do niego następujące operatory.

Do przedstawienia jednej liczby używane są 32 bity:

  • 0000 0000 0000 0000 0000 0000 0000 0000 wynosi zero;
  • 0000 0000 0000 0000 0000 0000 0000 0001 wynosi 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 wynosi 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 wynosi 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 wynosi 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 wynosi 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 wynosi 15;

Operatory bitowe:

Przykład Nazwa Wynik
$a i $b Bitowe „i” Ustawiane są tylko te bity, które są ustawione zarówno w $a, jak i $b.
$a | $b Bitowe „lub” Ustawione są te bity, które są ustawione w $a lub $b.
$a^$b Ekskluzywne lub Ustawiane są tylko te bity, które są ustawione albo tylko w $a, albo tylko w $b
~$a Negacja Bity, które nie są ustawione w $a, są ustawiane i odwrotnie.
$a<< $b Przesuń w lewo Wszystkie bity zmiennej $a są przesuwane o pozycje $b w lewo (każda pozycja oznacza „pomnożenie przez 2”)
$a >> $b Przesuń w prawo Wszystkie bity zmiennej $a są przesuwane o pozycje $b w prawo (każda pozycja oznacza „dzielenie przez 2”)

Operacje porównawcze

Operatory porównania, jak sama nazwa wskazuje, umożliwiają porównanie dwóch wartości.

Są to operacje na swój sposób unikalne, ponieważ niezależnie od rodzaju argumentów zawsze zwracają jedną z dwóch rzeczy: FAŁSZ Lub PRAWDA. Operacje porównania porównują ze sobą dwie wartości i jeśli warunek jest spełniony, zwracają PRAWDA, A jeśli nie - FAŁSZ.

PHP pozwala jedynie na porównywanie zmiennych skalarnych. W PHP nie można porównywać tablic i obiektów. Nie można ich nawet porównać pod kątem równości (używając operatora ==), ale PHP nie wyświetla ostrzeżenia podczas wykonywania takiej operacji. Tak więc, zastanawiając się kiedyś, dlaczego dwie zupełnie różne tablice są porównywane przy użyciu == nagle okazują się takie same, pamiętaj, że przed porównaniem oba operandy są konwertowane na słowo szyk, który następnie jest porównywany.

Aby uzyskać szczegółowe informacje, zobacz Porównanie tablic.

Operatory porównania:

Przykład Nazwa Wynik
$a == $b Równa się PRAWDA jeśli $a jest równe $b.
$a === $b Identycznie równe PRAWDA jeśli $a jest równe $b i jest tego samego typu. (Dodano w PHP 4)
$a!= $b Nie równe PRAWDA jeśli $a nie jest równe $b.
$a<>$b Nie równe PRAWDA jeśli $a nie jest równe $b.
$a!== $b Identyczne nie jest równe PRAWDA jeśli $a nie jest równe $b lub jeśli są różnych typów (dodano w PHP 4)
$a< $b Mniej PRAWDA jeśli $a jest dokładnie mniejsze niż $b.
$a > $b Więcej PRAWDA jeśli $a jest ściśle większe niż $b.
$a<= $b Mniej lub równo PRAWDA jeśli $a jest mniejsze lub równe $b.
$a >= $b Więcej lub równo PRAWDA jeśli $a jest większe lub równe $b.

Operacje logiczne

Operatory logiczne są przeznaczone wyłącznie do pracy z wyrażeniami boolowskimi i również zwracają FAŁSZ Lub PRAWDA.

Oto tabela operatorów logicznych PHP:

Należy zaznaczyć, że ocena wyrażeń logicznych zawierających takie operatory zawsze przebiega od lewej do prawej, a jeśli wynik jest już oczywisty (np. fałszywe&&coś zawsze daje FAŁSZ), wówczas obliczenia zostają zakończone, nawet jeśli wyrażenie zawiera wywołania funkcji. Na przykład w operatorze $logic = 0&&(time()>100); funkcja standardowa czas() nigdy nie zostanie wezwany.

Zachowaj ostrożność przy operacjach logicznych - nie zapomnij o dublowaniu znaków. Należy pamiętać, że np. | I || - dwa zupełnie różne operatory, z których jeden może potencjalnie zwrócić dowolną liczbę, a drugi - tylko FAŁSZ I PRAWDA.

Operatory inkrementacji (++) i dekrementacji (--) nie działają ze zmiennymi boolowskimi.

Operatory równoważności

W PHP począwszy od PHP4 istnieje identyczny operator porównania - potrójny znak równości === ,
lub sprawdź operatora. PHP jest dość tolerancyjny na niejawną konwersję ciągów znaków na liczby i odwrotnie.
Przykładowo poniższy kod wypisze, że wartości zmiennych są równe:

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

I to pomimo faktu, że zmienna $a reprezentuje liczbę i $b- linia. Spójrzmy teraz na nieco inny przykład:

$a=0; //zero
$b=""; // pusta linia
if($a==$b) echo "a i b są równe"; // Wypisuje „a i b są równe”

Chociaż $a I $b wyraźnie nie są równe, nawet w zwykłym znaczeniu tego słowa, skrypt zadeklaruje, że są takie same. Dlaczego to się dzieje? Chodzi o to, że jeśli jeden z operandów operatora logicznego można zinterpretować jako liczbę, to oba operandy są traktowane jako liczby. W tym przypadku pusta linia zamienia się w 0 , który następnie porównuje się z zerem. Nic dziwnego, że operator Echo Pracuje.
Problem rozwiązuje operator równoważności === (potrójna równość). Porównuje nie tylko dwa wyrażenia, ale także ich typy. Przepiszmy nasz przykład, używając tego operatora.

Powiedz przyjaciołom