php çıkarma PHP'de işlemler. PHP'de tamsayı bölme işlemi nasıl yapılır

  • 03.11.2019

Sorumlu sayısal, bilimsel veya istatistiksel hesaplamalar yapması gereken programcıların, bir web betik dilini bu rol için kabul edilebilir bir aday olarak görmeleri olası değildir. Ancak bununla birlikte, PHP dili, web komut dosyası oluşturmada ortaya çıkan matematik problemlerinin çoğuna eksiksiz bir çözüm sağlayan harika bir dizi özellik sunar. Buna ek olarak, PHP dili, rastgele kesinlikli aritmetik gibi bazı daha gelişmiş özelliklerin yanı sıra karma kitaplıklar ve kriptografik kitaplıklar için olanaklar sağlar.

PHP dilinin geliştiricileri, sağlam temellere dayanan bir yaklaşım benimsediler ve bu amaç için tasarlanmış tekerlekleri yeniden icat etmek için herhangi bir girişimde bulunmadılar. Gerçek şu ki, PHP dilinde kullanılan en temel matematiksel işlevlerin çoğu, bu işlevlerin C dilindeki eşdeğerlerinin etrafındaki sarmalayıcılardır.

matematiksel işlemler

PHP dilindeki matematiksel işlemlerin çoğu, işlem şeklinde değil, yerleşik işlevler şeklinde gerçekleştirilir. PHP, karşılaştırma işlemlerine ek olarak, beş basit aritmetik işlemin yanı sıra atamaların yanı sıra daha kısa artırma ve eksiltme ifadeleri yazmanıza izin veren bazı steno işlemleri sağlar.

Aritmetik işlemler

Beş temel aritmetik işlem, genellikle herhangi bir dört işlevli hesap makinesinde uygulanan işlemleri ve modulo (%) işlemini içerir. Aritmetik işlemlerin kısa bir açıklaması tabloda verilmiştir:

Aritmetik işlemler
Operasyon Tanım
+ İki işleneninin değerlerinin toplamını döndürür
- İki işlenen varsa, sağ işlenenin değeri soldaki değerinden çıkarılır. Yalnızca doğru işlenen varsa, işlem bu işlenenin değerini zıt işaretli olarak döndürür.
* İki işleneninin değerlerinin çarpımını döndürür
/ Sol işlenenin değerini sağ işlenenin değerine bölmenin kayan nokta sonucunu döndürür
% Sol işlenenin değerinin sağ işlenenin mutlak değerine göre tamsayı bölümünden kalanını döndürür

Programda yukarıda açıklanan ilk üç aritmetik işlemi (+, -, *) kullanırken, bu işlemler yapılırken tipin çift duyarlıklı kayan nokta değerlerinden tamsayı değerlerine yayıldığı dikkate alınmalıdır. Bu, işlemin her iki işleneni de tamsayıysa sonucun bir tamsayı olduğu ve işlenenlerden en az birinin çift duyarlıklı bir kayan noktalı sayı olması durumunda sonucun çift duyarlıklı bir kayan noktalı sayı olduğu anlamına gelir. Bir bölme işlemi gerçekleştirirken aynı türde yayılma meydana gelir; ayrıca, bölme bir kalan (tamsayı) olmadan gerçekleştirilmezse, sonucun çift duyarlıklı kayan noktalı bir sayı olacağı kadar ek bir etki vardır.

PHP'deki modulo (%) operatörü tamsayı işlenenleri alır ve bu işlem çift duyarlıklı kayan noktalı sayılara uygulanırsa, bu sayılar önce tam sayılara dönüştürülür (kesirli kısım atılarak). Böyle bir işlemin sonucu her zaman bir tamsayıdır.

Artırma ve eksiltme işlemleri

PHP'nin sözdiziminin çoğu C'den miras alınır ve C programcıları kısalığı ve bununla gurur duymasıyla ünlüdür. C dilinden alınan artırma ve eksiltme operatörleri, genellikle programlarda oldukça yaygın olan $count = $count + 1 gibi ifadeleri daha özlü bir şekilde temsil etmemize izin verir.

Artırma (++) operatörü, bu işlemin uygulandığı değişkenin değerine bir eklemek için kullanılır ve eksiltme operatörü (--) böyle bir değişkenin değerinden bir çıkarır.

Bu iki işlemin her birinin iki çeşidi vardır - sonek(bu formda, işlem işareti, işlemin geçerli olduğu değişkenden hemen sonra yerleştirilir) ve önek(bu formda, işlem işareti, işlemin geçerli olduğu değişkenin hemen önüne yerleştirilir). Her iki tat, bir değişkenin değerini değiştirmede aynı yan etkiye sahiptir, ancak sonek ve önek operatörleri, ifadeler olarak kullanıldığında farklı değerler döndürür. Sonek operatörü, ifadenin değeri döndürüldükten sonra değişkenin değeri değişecek şekilde çalışır ve önek operatörü, önce değerin değiştirileceği ve ardından yeni değerin değişkene döndürüleceği şekilde çalışır. . Bu fark, atama operatörlerinde azaltma ve artırma operatörleri kullanılarak bulunabilir:

PHP kodu $say = 0; $sonuç = $sayım++; echo "$count++ artışının sonucu: ".$sonuç."
"; $count = 0; $sonuç = ++$count; echo "++$sayım artışının sonucu: ".$sonuç."
";

Yukarıdaki ifadeler, tarayıcı penceresinde aşağıdaki çıktıyı üretir:

Artırma işlemleri

Bu örnekte, $result = $count++ ifadesi aşağıdaki ifadelere tamamen eşdeğerdir:

PHP kodu $sonuç = $say; $sayım = $sayım + 1;

Bununla birlikte $result = ++$count operatörü aşağıdaki operatörlere eşdeğerdir:

PHP kodu $sayım = $sayım +1; $sonuç = $say;

atama işlemleri

Artırma (ve azaltma) operatörleri, bir değişkenin değerine bir tane eklemek için gereken kod miktarını azaltır, ancak değişkenin değerini başka bir sayıya veya diğer aritmetik işlemlere atayan kod miktarını azaltmaz. Neyse ki, beş aritmetik operatörün tümü, değeri üzerinde bir aritmetik işlem gerçekleştirmenin sonucunu bir kısa ifadede bir değişkene atamanıza izin veren karşılık gelen atama operatörlerine (+=, -=, *=, /= ve %=) sahiptir. bu değişken. Örneğin, operatör

PHP kodu $say = $say * 3;

olarak kısaltılabilir

PHP kodu $say *= 3;

Basit matematik fonksiyonları

Programın karmaşıklığında sadece aritmetik işlemlerin kullanıldığı bir sonraki aşama, her türlü işlevi kullanmaktır. İşlevler, bir sayısal türden diğerine dönüştürme (bkz. Veri türleri) ve bir sayı kümesindeki minimum veya maksimum sayıyı bulma gibi görevleri gerçekleştirmenize olanak tanır. Aşağıdaki tablo basit matematik işlevleri sağlar:

PHP Basit Matematik Fonksiyonları
İşlev Tanım
zemin() Tek bir gerçek parametre alır (genellikle çift duyarlıklı bir kayan noktalı sayı) ve bu gerçek parametreden küçük veya ona eşit en büyük tamsayıyı döndürür (aşağı yuvarlama)
tavan() Bu işlevin adı, tavanın kısaltmasıdır. İşlev, tek bir gerçek parametre alır (tipik olarak çift duyarlıklı bir kayan noktalı sayı) ve bu gerçek parametreden büyük veya ona eşit en küçük tamsayıyı döndürür (yuvarlanmış)
yuvarlak() Tek bir gerçek parametre alır (genellikle çift duyarlıklı kayan noktalı sayı) ve en yakın tamsayıyı döndürür
abs() Bir sayının mutlak değeri. Tek sayısal gerçek parametrenin negatif bir değeri varsa, fonksiyon karşılık gelen pozitif sayıyı döndürür; gerçek parametre pozitifse, fonksiyon gerçek parametrenin kendisini döndürür
min() Herhangi bir sayıda (en az bir tane) sayısal gerçek parametreyi kabul eder ve tüm gerçek parametre değerlerinin en küçüğünü döndürür
maksimum() Herhangi bir sayıda sayısal gerçek parametreyi (ancak en az birini) kabul eder ve tüm gerçek parametre değerlerinin en büyüğünü döndürür

Örneğin, aşağıdaki ifadenin sonucu 3'tür çünkü bir işlev çağrısına sahip her ifadenin değeri de 3'tür:

PHP kodu $sonuç = min(3, abs(-3), max(yuvarlak(2.7), tavan(2.3), kat(3.9)));

Rastgele sayı üretimi

PHP iki rasgele sayı üreteci kullanır (sırasıyla işlevler tarafından çağrılır rand() Ve mt_rand()). Bu jeneratörlerin her biri ile aynı amaca yönelik üç fonksiyon ilişkilendirilmiştir: başlangıç ​​değerini ayarlama fonksiyonu ( srand() Ve mt_srand()), rasgele sayı işlevinin kendisi ve üreteç tarafından döndürülebilecek en büyük tamsayıyı seçen işlev (( getrandmax() Ve mt_getrandmax())). getrandmax() ve mt_getrandmax() işlevleri, Rand() veya mt_rand() işlevi tarafından döndürülebilecek en büyük sayıyı döndürür, Windows platformlarında bu değer 32768 ile sınırlıdır.

Rand() işlevinde kullanılan belirli bir sözde rastgele sayı üretme işlevinin seçimi, PHP yorumlayıcısının hangi kitaplıklarla derlendiğine bağlı olabilir. Buna karşılık, mt_rand() üreteci her zaman aynı sözde rasgele sayı üretme işlevini kullanır (mt, Mersenne Twister'ın kısaltmasıdır) ve mt_rand() işlevi için çevrimiçi belgelerin yazarı, bu işlevin de daha hızlı ve " daha fazlası olduğunu iddia eder. Rand() yerine rastgele" (kriptografi açısından). Bu ifadelerin doğruluğundan şüphe etmek için hiçbir nedenimiz yok, bu yüzden Rand() yerine mt_rand() işlevini kullanmayı tercih ediyoruz.

Bazı platformlar için PHP'nin bazı sürümlerini kullanırken, Rand() ve mt_rand() işlevleri, ilk önce bir tohum değeri belirtmeden bile, görünüşte tamamen kabul edilebilir rasgele sayılar üretiyor gibi görünüyor. Ancak böyle bir izlenime güvenilmemelidir. Birincisi, bir tohum değeri belirtmeden rasgele sayı üretme fonksiyonlarını kullanan programlar, diğer platformlara kolaylıkla taşınamaz ve ikinci olarak, bu fonksiyonların bir tohum değeri belirtmeden güvenilir şekilde çalışması garanti edilmez.

PHP'nin rastgele sayı üreteçlerinden herhangi biri için (mt_srand() veya srand() işlevini kullanarak) bir tohum ayarlamanın tipik bir yolu şudur:

PHP kodu mt_srand((çift)microtime()*1000000);

Bu ifade, jeneratörün başlangıç ​​değerini, son tam saniyeden bu yana geçen mikrosaniye sayısına ayarlar. (Bu ifadede ikiye katlama gerçekten gereklidir, çünkü microtime() işlevi, çarpma işleminde bir tamsayı olarak kabul edilen, ancak parametre geçirme işleminde olmayan bir dize döndürdüğü için.) Okuyucunun belirtilenleri girmesi önerilir. başlatma operatörü, bu operatörün amacını tam olarak anlamasa bile; ilgili mt_rand() veya Rand() işlevini kullanmadan önce bu ifadeyi her PHP sayfasına sadece bir kez koymak yeterlidir ve bu ifade, başlangıç ​​noktasının değişmesini ve dolayısıyla her seferinde farklı bir rastgele dizi oluşturulmasını sağlayacaktır.

Tohum oluşturmanın bu özel yöntemi, sözde rasgele sayılar üretmenin içini ve dışını tam olarak anlayanlar tarafından derinlemesine düşünülmüştür, bu nedenle büyük olasılıkla sonsuza kadar, herhangi bir tek programcının daha fazla bir şey bulmaya yönelik herhangi bir girişiminden üstün kalacaktır " zor".

Açıkçası, bu sözde rasgele sayı üretme işlevleri yalnızca tamsayılar döndürür, ancak belirli bir aralıktaki rastgele bir tamsayı, Rand() / getrandmax(). Bundan sonra, belirtilen aralık gerektiği gibi ölçeklenebilir ve kaydırılabilir. Aşağıda bir örnek gösterilmiştir:

PHP kodu // Diyelim ki 100.0 ile 120.0 arasında rastgele bir sayı üretmemiz gerekiyor $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); yankı $rastgele."
"; // Tam sayılar üret (100 - 120); echo round($rastgele);

Rastgele sayıların oluşturulduğundan emin olmak için sayfayı bu kodla birkaç kez yenilemeyi deneyin.

matematiksel sabitler

PHP sürüm 4.0'da, belgelerde açıklanan yalnızca bir matematiksel sabit vardı - M_PI (çift duyarlıklı kayan noktalı sayı olarak gösterilen pi sayısının değeri). PHP 4.0.2'den beri birçok yeni sabit tanıtıldı. Bu yeni sabitlerin çoğu pi sayısı (veya katları), e sayısı (veya katları) ve kareköklerle ilgilidir; ek olarak, bazı sabitler başka türdendi. Ancak sonraki sürümlerde, birkaç nedenden dolayı, sabitler listesi yine nispeten az sayıda önceden tanımlanmış matematiksel sabite indirgenmiştir:

PHP Matematiksel Sabitler
Devamlı Tanım
M_PI π
M_PI_2 π / 2
M_PI_4 π / 4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / kare(π)
BENDE e
M_SQRT2 kare(2)
M_SQRT1_2 1 / kare(2)
M_LOG2E log2(e)
M_LOG10E günlük(e)
M_LN2 kütük(2)
M_LN10 kütük(10)

Sayı Biçimi Kontrolü

PHP dili, sayıların doğru temsilini kontrol etmenizi sağlayan bir dizi işlev sağlar. PHP'de güçlü bir yazım olmamasına rağmen, elde ettiğiniz sonuçların özelliklerini tahmin edebilmeniz ve bunları işlemenin en iyi yolunu seçebilmeniz için gerekirse kodunuzda bu kontrollerden bazılarını kullanmanız önerilir.

İlk ve en basit test, işlevi kullanmaktır. is_numeric(). Bu tür diğer kontrollerin çoğunda olduğu gibi, is_numeric işlevi, kendisine iletilen argüman herhangi bir türden sayısal bir veriyse (işaretli veya işaretsiz, tamsayı veya kayan nokta) veya geçerli bir sayısal değer döndüren matematiksel bir ifadeyse, bir boolean sonucu döndürür, true .

Fonksiyonlar ile is_int() Ve is_float Bir sayının tam sayı mı yoksa kesir mi olduğunu belirleyebilirsiniz. İki kontrol daha biraz daha karmaşıktır: fonksiyonlar sonlu() Ve sonsuz() adlarının gösterdiği kontrolleri (sayı sonlu veya sonsuz) tam olarak gerçekleştirmenize izin verir. Ancak, kesinlikle konuşursak, bu işlevlerin kapsadığı değer aralığı gerçek sonsuzluğu içeremez (ve bir sayının sonsuz büyük bir değere sahip olup olmadığı kontrol edilebilir mi?). Bunun yerine, belirli bir sistemde izin verilen kayan nokta değerleri aralığının sınırları kullanılır.

Aşağıda, bu işlevlerin kullanımına bir örnek verilmiştir:

PHP kodu is_numeric(4); // true is_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // yanlış is_int(4); // true is_int(4.2); // yanlış is_int("4"); // false - bu denetim, is_numeric() işleviyle yapılan denetimden daha katıdır is_float(4); // yanlış is_float(4.0); // true is_float(M_PI); // doğru

Sayı sistemi dönüştürme

Varsayılan olarak, PHP harici dahili sayısal değerleri ileri ve geri dönüştürmek için taban 10'u kullanır.Ayrıca PHP yorumlayıcısına, harici gösterimin sayının başına 0'ı ekleyerek taban 8 sekizlik sayıları veya onaltılık sayılarda belirtilen onaltılık sayıları kullandığını söyleyebilirsiniz. taban 16 (bunu yapmak için sayının önüne 0x eklemelisiniz).

Tabii ki, sayıları harici gösterimden dahili gösterime dönüştürdükten sonra, ikili biçimde bellekte saklanırlar ve tüm temel aritmetik ve matematiksel hesaplamalar, işletim sisteminin kendisinde taban 2'de gerçekleştirilir. Ayrıca, PHP dili bir dizi sağlar. sayıları bir sistem tabanından diğerine dönüştürmek için işlevler. Bu özelliklere genel bir bakış aşağıdaki tabloda sunulmaktadır:

Sayı sistemi dönüştürme işlevleri
İşlev Tanım
BinDec() İkili bir tam sayı (2 tabanındaki sayı) olan tek bir dize argümanı alır ve bu sayının 10 tabanındaki dize temsilini döndürür
AraBin() BinDec()'e benzer, ancak taban 10'dan taban 2'ye dönüştürür
EkimAra() BinDec()'e benzer, ancak taban 8'den taban 10'a dönüştürür
Aralık() BinDec()'e benzer, ancak taban 10'dan taban 8'e dönüştürür
OnaltılıAra() BinDec()'e benzer, ancak taban 16'dan taban 10'a dönüştürür
DecHex() BinDec()'e benzer, ancak taban 10'dan taban 16'ya dönüştürür
temel_dönüştürme() Bir dize parametresi (dönüştürülecek tamsayıyı temsil eder) ve iki tamsayı parametresi (taban ve istenen taban) alır. Dönüştürülen sayıyı temsil eden bir dize döndürür. Bu dizide, 9'dan daha eski rakamlar (10'dan 35'e kadar) a-z karakterleriyle temsil edilir. Hem orijinal hem de istenen bazlar 2-36 aralığında olmalıdır.

Tüm sayı dönüştürme işlevleri, sayıları belirli bir tabandan diğerine dönüştüren özel amaçlı işlevlerdir. Bunun istisnası, başlangıç ​​ve sonuç tabanının atamasıyla rastgele parametreleri kabul eden base_convert() işlevidir.

Tüm sayı dönüştürme işlevlerinin dize parametreleri aldığını ve dize değerleri döndürdüğünü unutmayın, ancak ondalık sayısal parametreleri kullanabilir ve tür dönüştürmeyi doğru yapmak için PHP yorumlayıcısına güvenebilirsiniz. Başka bir deyişle, hem DecBin("1234") hem de DecBin(1234) çağrıları aynı sonucu verir.

Üsler ve logaritmalar

PHP dili, 10 tabanında ve e tabanında (tabloda gösterilmiştir) çalışmak için iki çeşidin standart üstel ve logaritmik işlevlerini içerir.

PHP, e sayısını belirtilen güce yükseltmek için exp() işlevini sağlar, ancak 10'un gücünü belirtilen güce yükseltebilecek tek parametreli bir işlev yoktur.Ancak, pow() işlevini iki parametre ile kullanabilirsiniz. bunun yerine, ilk parametre olarak 10 verilmesi.

Aynı tabana sahip üstel ve logaritmik fonksiyonların birbirinin tersi olduğunu şu şekilde elde edilen sonuçların özdeşliğini kontrol ederek doğrulayabilirsiniz:

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

Trigonometrik fonksiyonlar

PHP dili, genel bilgileri tabloda verilen standart bir temel trigonometrik işlevler seti sağlar:

Trigonometrik fonksiyonlar
İşlev Tanım
pi() Hiçbir parametre almaz ve yaklaşık bir π (3.1415926535898) değeri döndürür. M_PI sabiti ile birbirinin yerine kullanılabilir
günah() Radyan cinsinden sayısal bir parametreyi kabul eder ve parametrenin sinüsünü çift duyarlıklı kayan noktalı sayı olarak döndürür
çünkü() Radyan cinsinden sayısal bir parametre alır ve parametrenin kosinüsünü çift duyarlıklı kayan noktalı sayı olarak döndürür
ten rengi() Radyan cinsinden sayısal bir parametreyi kabul eder ve parametrenin tanjantını çift duyarlıklı kayan noktalı sayı olarak döndürür
de olduğu gibi() Sayısal bir parametre alır ve parametrenin arksinüsünü radyan cinsinden döndürür. Giriş, -1 ile 1 arasında olmalıdır (işlev bu aralığın dışında giriş alırsa, bir NAN sonucu üretecektir). Sonuçlar -π/2 ile π/2 arasında değişir
acos() Sayısal bir parametre alır ve parametrenin ark kosinüsünü radyan cinsinden döndürür. Girdi -1 ile 1 arasında olmalıdır (fonksiyon bu aralığın dışında girdi alırsa bir NAN sonucu üretecektir. Sonuçlar 0 ile π arasındadır.
atan() Sayısal bir parametreyi kabul eder ve parametrenin radyan cinsinden ark tanjantını döndürür. Sonuçlar -π/2 ile π/2 arasında değişir

Aşağıda "standart" açılar için trigonometrik fonksiyonları hesaplamak için bir tablo derleme örneği verilmiştir:

PHP kodu function display_trigonometry($işlev_dizisi, $girdi_dizisi) ( // İşlev başlığı yankısı " "; ) Eko ""; // Tablonun geri kalanını foreach($input_array $input olarak) çıkar ( echo " "; foreach($işlev_dizisi as $işlev) ( yankı " "; ) Eko ""; ) Eko "
anlam/işlev$işlev
".sprintf("%.4f",$giriş).""; printf("%4.4f", $işlev($input)); echo "
"; ) display_trigonometry(array("sin", "cos", "tan"), dizi(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

PHP'de trigonometrik fonksiyonların kullanımına bir örnek

Çok büyük (ancak sonsuz olmayan) teğet değerleri elde etmek, teorik olarak paydaların sıfıra eşit olması gerektiği gerçeğinden kaynaklanmaktadır, ancak gerçekte yuvarlama hataları nedeniyle sıfırdan biraz farklıdırlar.

Keyfi hassas hesaplama (BC fonksiyonlarını kullanarak)

Tamsayı ve çift duyarlıklı kayan nokta türleri, web komut dosyası oluşturmada ortaya çıkan çoğu matematik problemini çözmek için iyidir, ancak bu türler tarafından temsil edilen her bir değer örneğini depolamak için sabit miktarda bilgisayar belleği vardır, bu nedenle sayı gösteriminin boyutu ve kesinliği bu türler kaçınılmaz olarak kısıtlamalar getirir.

Tabii ki, bu veri türlerinin kesin aralıkları sunucu bilgisayarın mimarisine bağlı olabilir, ancak tamsayı değerleri tipik olarak -2 31 -1 ile 2 31 -1 arasında değişebilir ve çift duyarlıklı kayan nokta sayıları temsil edebilir. yaklaşık 13 ila 14 ondalık basamak kesinliği olan sayılar. Öte yandan, daha geniş bir temsil aralığı veya daha fazla hassasiyet gerektiren görevler için PHP, keyfi hassasiyetle matematiksel fonksiyonlar(Unix sisteminin olanaklarına dayalı keyfi kesinlikte bir hesaplama yardımcı programından sonra BC işlevleri olarak da adlandırılır).

Rastgele hassas işlevler, özellikle kullanıcı bu tür bir derlemeyi kendisi yaptıysa, PHP yorumlayıcısının derlemesine dahil edilmeyebilir, çünkü bunun için kullanıcının yapılandırma aşamasında bayrağın parametrelere dahil edilmesi gerektiğini bilmesi gerekir. --enable-bcmath. Belirtilen işlevlere erişiminiz olup olmadığını kontrol etmek için bcadd("1","1") ifadesini değerlendirmeyi deneyin. Tanımsız bir işlev yazan bir hata mesajı alırsanız, yapılandırmayı yeniden düzenlemeniz ve PHP yorumlayıcısını yeniden derlemeniz gerekir.

BC işlevleri, parametre ve dönüş değerleri olarak sabit uzunluklu sayısal türleri değil, dizeleri kullanır. PHP'deki dizeler yalnızca kullanılabilir bellekle sınırlı olduğundan, hesaplamalarda kullanılan sayılar herhangi bir uzunlukta olabilir. Temel hesaplamalar ondalık biçimde yapılır ve birçok yönden bir kişinin bir kalem ve kağıtla yapabileceğine benzer (eğer çok hızlı hareket edebilir ve sabırlı olabilirse). Tamsayılar üzerinde çalışan BC işlevleri kesindir ve ihtiyaç duyduğunuz kadar basamak kullanmanıza izin verirken, kayan noktalı sayılar üzerinde çalışan işlevler belirtilen ondalık basamak sayısına kadar hesaplamalar yapar. BC işlevlerine genel bir bakış aşağıdaki tabloda verilmiştir:

Rastgele hassasiyete sahip matematiksel fonksiyonlar (BC fonksiyonları)
İşlev Tanım
bcadd() Sayıları temsil eden iki dize parametresini ve bir ölçek faktörü göstergeli isteğe bağlı bir tamsayı parametresini alır. Ölçek faktörü parametresi tarafından belirtilen sonuçtaki ondalık basamak sayısıyla birlikte ilk iki parametrenin toplamını bir dize olarak döndürür. Ölçek faktörü atamalı parametre belirtilmemişse, varsayılan ölçek faktörü kullanılır.
bcsub() İlk parametreden ikinci parametreyi çıkarmanın sonucunu döndürmesi dışında bcadd()'a benzer.
bcmui() Parametrelerini çarpmanın sonucunu döndürmesi dışında bcadd()'a benzer
bcdiv() İlk bağımsız değişkeni ikinciye bölmenin sonucunu döndürmesi dışında bcadd()'a benzer.
bcmod() İlk parametrenin ikinciye bölünmesinden modülü (kalan) döndürür. Dönüş değeri tamsayı türünde olduğundan, işlev, ölçek faktörü gösterimi olan bir parametreyi kabul etmez.
bcpow() Birinci parametreyi, ikinci parametrenin belirttiği güce yükseltir. Sonuçtaki ondalık basamak sayısı, verilmişse, ölçek faktörü tarafından belirlenir.
bcsqrt() İsteğe bağlı ölçek faktörünün değeri tarafından belirlenen ondalık basamak sayısıyla parametrenin karekökünü döndürür
bcölçek() BC işlevine yapılan sonraki çağrılar için varsayılan ölçek faktörünü ayarlar

Bu işlevlerin çoğu, son parametre olarak, sonucun kaç ondalık basamağa sahip olması gerektiğini belirten isteğe bağlı bir ölçek faktörü (tamsayı) alır. Böyle bir parametre belirtilmezse, ölçek faktörü olarak varsayılan ölçek faktörü kullanılır ve bu da bcscale() işlevi çağrılarak ayarlanabilir. Bu varsayılan değer için varsayılan değer (yani, komut dosyası bcscale() işlev çağrısını kullanmıyorsa kullanılan değer), php.ini başlatma dosyasında da ayarlanabilir.

Aşağıda, tamsayılı aritmetik işlemleri tam olarak gerçekleştirmek için isteğe bağlı bir kesinlik işlevi kullanmanın bir örneği verilmiştir. Aşağıdaki kodu çalıştırıyor:

PHP kodu için ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
BC fonksiyonlarını kullanarak astronomik büyüklüklerin hassas hesaplanması

Bu hesaplamalar için normal PHP tamsayı türü kullanılmışsa, tamsayı taşması hesaplamanın bitiminden çok önce gerçekleşir, bu nedenle döngünün geri kalanı yaklaşık bir kayan noktalı sayı elde etmek için hesaplamalar yapar.

Diziler Şekil işleme 1 2 3 4 5 6 7 8 9 10

Tüm temel matematiksel işlemler PHP'de mevcuttur. Hem tamsayı hem de gerçek sayılar işlenen olarak kullanılabilir.

Tablo aritmetik operatörleri listeler:
ŞebekeİmzaTanım
Ek + İki Değer Eklemek
Çıkarma - Bir değeri diğerinden çıkarma
Çarpma işlemi * iki değeri çarpma
Bölünme / Bir değeri diğerine bölme
Bir bölümün kalanını alma % Bir değeri diğerine bölün ve kalanı döndürün (modulo bölümü)
artış ++ Bir sayıyı birer birer artırmak için stenografi gösterimi
azalma -- Bir sayıyı birer birer azaltmak için kısayol gösterimi
tekli olumsuzlama - Pozitif bir sayıyı negatife veya negatifi pozitife çevirmek

Çıkarma, çarpma, bölme, modulo ve toplama operatörleri

Çıkarma, çarpma, bölme, modulo ve toplama operatörleri matematikte olduğu gibi tamamen aynı şekilde kullanılır. Burada bölme ve modulo operatörlerine dikkat etmeye değer.

Bölme operatörü (" / "), her iki değerin de eşit olarak bölünebilen tamsayılar (veya tamsayılara dönüşen dizeler) olması ve bu durumda bir tamsayı değeri döndürülmesi dışında bir kayan noktalı sayı döndürür.

sonuç2 = $sonuç2
"; echo "sonuç3 = $sonuç3
sonuç4 = $sonuç4"; ?>

Modulo bölümünde, işlenenler, işlem başlamadan önce tam sayılara (ondalıklar kaldırılarak) dönüştürülür. Kalan % işleminin sonucu, temettü ile aynı işarete sahip olacaktır:

tekli olumsuzlama

Tekli olumsuzlama operatörü "-" ile gösterilir, tek işleneninin değerini tersine çevirir:

Bu durumda, parantezlere gerek yoktur çünkü tekli olumsuzlama en yüksek önceliğe sahiptir, ancak -5 ve 4 sayılarının eklendiğinin açık olması için kodu düzenlemeye yardımcı olurlar.

artış

++ ile gösterilen artış operatörü, üzerinde çalıştığı işlenenin her iki tarafına da yerleştirilebilir. Tıpkı bir değere bir tane eklemek gibi, bu değeri birer birer artırır. Gerçek sonuç, operatörün uygulandığı yere, uygulandığı işlenenden önce veya sonra bağlıdır. Bu ifade genellikle değişkenlerle birlikte kullanılır ve bu genellikle döngülerin içinde olur (döngüler daha sonra tartışılacaktır).

önek artış formu

önek formu- bu, artırma operatörü işlenenden önce bulunduğunda, bu yazma biçimi, önce artırmanın yürütüleceği anlamına gelir: işlenenin değerini bir artırır ve ancak o zaman talimatın geri kalanı yürütülür:

Postfix artış formu

son ek formu biraz farklı yazılır - artış bu durumda işlenenden sonra bulunur. Postfix notasyonu ile, işlenenin ilk kullanımı mevcut değerini döndürür, ancak bundan sonra değer bir artırılır:

azalma

-- ile gösterilen azaltma operatörü ve artırma operatörünün aksine, işlenenin değerini bir artırmak yerine azaltır. Azaltma ayrıca önek ve sonek notasyonuna da izin verir:

Son güncelleme: 1.11.2015

PHP'de çeşitli operatörler kullanabiliriz: aritmetik, mantıksal, vb. Her bir işlem türüne bakalım.

Aritmetik işlemler

    + (ekleme işlemi)

    Örneğin $a + 5

    - (çıkarma işlemi)

    Örneğin $a - 5

    * (çarpma işlemi)

    Örneğin $a * 5

    / (bölünme)

    Örneğin $a / 5

    % (bölümün kalanı)

    Örneğin: $a=12; echo $a % 5; // 2'ye eşittir

    ++ (değeri bir artır / artır)

    Örneğin, ++$a

    ++$a ve $a++ ifadeleri arasındaki farkı anlamak önemlidir. Örneğin:

    $a=12; $b=++$a; // $b eşittir 13 echo $b;

    Burada önce $a değişkeninin değerine bir tane eklenir ve ardından değeri $b değişkenine eşitlenir. Aksi takdirde, ifade şöyle görünürdü: $b=$a++; . Burada önce $a değişkeninin değeri $b değişkenine eşitti ve sonra $a değişkeninin değeri artırıldı.

    -- (değeri bir azalt/azalt)

    Örneğin, --$a . Ve tıpkı artış durumunda olduğu gibi, iki tür notasyon vardır: --$a ve $a--

atama işlemleri

    Bir değişkeni belirli bir değere ayarlar: $a = 5

    Toplama ve ardından sonucun atanması. Örneğin: $a=12; $a += 5; yankı $a; // 17'ye eşittir

    Çıkarma ve ardından sonucun atanması. Örneğin: $a=12; $a -= 5; yankı $a; // 7'ye eşittir

    Çarpma ve ardından sonucun atanması: $a=12; $a *= 5; yankı $a; // 60'a eşittir

    Bölme ve ardından sonucun atanması: $a=12; $a /= 5; yankı $a; // 2.4'e eşittir

    Sonucun atanmasıyla dizelerin birleştirilmesi. İki satır için geçerlidir. Değişkenler dizeleri değil, örneğin sayıları saklarsa, değerleri dizelere dönüştürülür ve ardından işlem gerçekleştirilir: $a=12; $a.= 5; yankı $a; // 125'e eşittir // $b="12" ile aynıdır; $b.="5"; // 125'e eşittir

    Bir bölümün kalanını almak ve ardından sonucu atamak: $a=12; $a %= 5; yankı $a; // 2'ye eşittir

Karşılaştırma işlemleri

Karşılaştırma işlemleri, kural olarak, iki değeri karşılaştırmak gerektiğinde koşullu yapılarda kullanılır ve karşılaştırmanın sonucuna bağlı olarak bazı eylemler gerçekleştirir. Aşağıdaki karşılaştırma işlemleri mevcuttur.

    Eşitlik operatörü iki değeri karşılaştırır ve eğer eşitlerse true, aksi takdirde false döndürür: $a == 5

    Kimlik operatörü ayrıca iki değeri karşılaştırır ve bunlar eşitse true, aksi takdirde false döndürür: $a === 5

    İki değeri karşılaştırır ve eşit değilse true, aksi takdirde false döndürür: $a != 5

    İki değeri karşılaştırır ve eğer eşit değillerse true, aksi takdirde false döndürür: $a !== 5

    İki değeri karşılaştırır ve eğer birincisi ikinciden büyükse true, aksi takdirde false döndürür: $a > 5

    İki değeri karşılaştırır ve eğer birincisi ikinciden küçükse true, aksi takdirde false döndürür: $a< 5

    İki değeri karşılaştırır ve eğer birincisi ikinciden büyük veya ona eşitse true, aksi takdirde false döndürür: $a >= 5

    İki değeri karşılaştırır ve birincisi ikinciden küçük veya ona eşitse true, aksi takdirde false döndürür: $a<= 5

Eşitlik ve Kimlik Operatörü

Her iki operatör de iki ifadeyi karşılaştırır ve ifadeler eşitse true değerini döndürür. Ama aralarında farklar var. Eşitlik işleminde farklı türde iki değer alınırsa, bunlar bire indirgenir - yorumlayıcının en uygun bulduğu değer. Örneğin:

Açıkçası, değişkenler farklı türlerde farklı değerler depolar. Ancak karşılaştırıldığında, aynı türe indirgenecekler - sayısal. Ve $a değişkeni 22 sayısına dönüştürülecek. Sonuç olarak, her iki değişken de eşit olacaktır.

Veya örneğin aşağıdaki değişkenler de eşit olacaktır:

$a = yanlış; $b = 0;

Bu gibi durumlardan kaçınmak için, yalnızca değeri değil, aynı zamanda değişkenin türünü de dikkate alan eşdeğerlik işlemi kullanılır:

$a = "22a"; $b = 22; if($a===$b) echo "eşit"; else echo "eşit değil";

Şimdi değişkenler eşit olmayacak.

Eşitsizlik operatörleri != ve !== benzer şekilde çalışır.

Boole işlemleri

Boolean işlemleri tipik olarak iki karşılaştırma işleminin sonuçlarını birleştirmek için kullanılır. Örneğin, birkaç koşul doğruysa belirli bir eylemi gerçekleştirmemiz gerekir. Aşağıdaki mantıksal işlemler kullanılabilir:

    Her iki karşılaştırma işlemi de true döndürürse true, aksi takdirde false döndürür: $a == 5 && $b = 6

    && ile benzer: $a == 5 ve $b > 6

    En az bir karşılaştırma işlemi doğru olarak değerlendirilirse true döndürür, aksi takdirde false döndürür: $a == 5 || $b = 6

    || işlemine benzer şekilde : $a< 5 or $b > 6

    Karşılaştırma işlemi false döndürürse true döndürür: !($a >= 5)

    Değerlerden yalnızca biri doğruysa true döndürür. Her ikisi de doğruysa veya hiçbiri doğru değilse, false döndürür. Örneğin: $a=12; $b=6; if($a xor $b) echo "doğru"; else "yanlış" yankısı;

    Burada mantıksal işlemin sonucu false olacaktır, çünkü her iki değişken de belirli bir değere sahiptir. Kodu değiştirelim:

    $a=12; $b=NULL; if($a xor $b) echo "doğru"; başka yankı "yanlış";

    Burada bir değişkenin değeri ayarlanmadığından sonuç zaten true olacaktır. Değişken NULL ise, mantıksal işlemlerde değeri yanlış olarak kabul edilecektir.

Bit işlemleri

Bit işlemleri, bir sayının ayrı bitleri üzerinde gerçekleştirilir. Sayılar ikili gösterimde kabul edilir, örneğin ikili gösterimde 2 010, 7 sayısı 111'dir.

    & (boole çarpımı)

    Çarpma bit bazında yapılır ve her iki işlenenin de bit değerleri 1'e eşitse işlem 1, aksi takdirde 0 sayısı döndürülür.Örneğin: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // 4'e eşittir

    Burada ikili sistemde 4 sayısı 100 ve 5 sayısı 101'dir. Sayıları bit ile çarpın ve (1*1, 0*0, 0*1) = 100, yani ondalık olarak 4 sayısını elde edin.

    | (mantıksal ekleme)

    Mantıksal çarpmaya benzer şekilde, işlem ikili sayılar üzerinde de gerçekleştirilir, ancak şimdi bu bitte en az bir sayıdan bir tane varsa bir döndürülür. Örneğin: $a1 = 4; //100 $b1 = 5; //101 yankı $a1 | $b1; // 5'e eşittir

    ~ (mantıksal olumsuzlama)

    tüm basamakları ters çevirir: bir basamağın değeri 1 ise, o zaman sıfır olur ve bunun tersi de geçerlidir. $b = 5; yankı ~$b;

    x<

    x>>y - x sayısını y basamaklı sağa kaydırır. Örneğin, 16>>1, 16 sayısını (ikili sistemde 10000 olan) bir basamak sağa kaydırır ve ondalık olarak 1000 veya 8 ile sonuçlanır.

Dize Birleştirme

Nokta operatörü, dizeleri birleştirmek için kullanılır. Örneğin, birkaç satırı birleştirelim:

$a="Merhaba, "; $b="dünya"; yankı $a . $b. "!";

Değişkenler dizeleri değil, sayılar gibi diğer türleri temsil ediyorsa, değerleri dizelere dönüştürülür ve ardından dize birleştirme işlemi de gerçekleşir.

Mantıksal işlemler tüm programlama dillerinde mevcuttur ve PHP bir istisna değil. Basit bölme, çarpma, toplama veya çıkarma işlemlerinin yanı sıra, şimdi bahsedeceğimiz ve ayrıca ayrıntılı örnekler kullanarak analiz edeceğimiz tamsayı ve artık bölmeler de vardır.

Tamsayı bölümü, bölümün tamsayı bölümünün çıktısıdır. Örneğin, 5'i 2'ye bölersek 2,5 değil 2 elde ederiz.

Artık bölünme ile her şey farklıdır. Bu, bir tamsayı ile bölme işleminin kalanının çıktısıdır. Örneğin, aynı beşi bölersek 2 değil 1 elde edersiniz çünkü 5'i 2'ye bölerek 2 elde ederiz ve kalan 1 kalır.

PHP'de tamsayı bölme işlemi nasıl yapılır

Örneğin, Python'da bu bölme işlemi basit bir operatörle yapılır: "//".

Ve PHP Bunu yapmak o kadar kolay olmayacak, ancak yine de süreç, süper dil bilgisi gerektirmiyor.

Bunun nasıl uygulanabileceğine dair bir örnek verelim.

İÇİNDE PHP Fonksiyonun yedinci versiyonu şöyle görünür:

Intdiv();

Daha eski bir sürümde, aynı işlev şöyle görünür:

Ayrıca tüm sürümler için bir yol var:

Zemin();

Nasıl başvurulur?

Örneğin ilk fonksiyonu ele alalım, gerisi aynı şekilde yapılıyor.

$sonuç = intdiv(10, 3); yankı $sonuç;

PHP'de artık bölme

Bir bölümün tamsayı olarak kalanını görüntülemek için php, sadece "%" operatörünü koyun.

$i = %10 3; yankı $i;

Gördüğümüz gibi, her şey oldukça basit ve uzun açıklamalar gerektirmiyor.

Nerelerde uygulanabilir?

Tamsayılı bölme bilgisi PHP iki sayıyı karşılaştırmanız, bir çevirme numarası oluşturmanız (popüler bir alıştırma) veya örneğin FizzBuzz adlı bir program oluşturmanız gerekiyorsa çok yararlı olacaktır. Özü, 1'den 100'e kadar her sayıyı 3 ve 5'e bölen bir döngü yazmanız gerektiğidir. hem 5'i hem de 3'ü bölersek kalanı 0 alırsak FizzBuzz yazarız. Bu, iş görüşmelerinde çok popüler bir iş. Kendin yaptıysan, kendinle gurur duyabilirsin.

Veya örneğin 452 sayısından tüm sayılarını (4, 5, 2) yazdırmamız gerekiyor.

Çözüm

Tabii ki, tamsayı ve kalan bölümleri kullanışlıdır ve oldukça yaygındır, kullanımı Python'daki kadar uygun değildir, ancak yine de önemlidir.

Artık bir programlama dili öğrenmeye bir adım daha yakınsınız php, ve gelecekte zorlukların üstesinden gelmek için gayretli olursanız daha da yakınlaşacaksınız.