Anlamak PHP &

5 Cevap php

Ben genellikle bir çift sayı ise $ var bir tek sayı ve false ise true döndürür, benim kodunda ($ var ve 1) kullanın.

Sadece ne hiçbir fikrim yok olduğunu kafama dank etti "&" aslında yok. Herkes açıklamak ister?

5 Cevap

& olan ikili and. Başka bir ikili değere sahip bir ikili değere sahip, ve and, sonra sonuç and iki bitsel olacaktır. Örnek:

  01101010
& 01011001
= 01001000

Sağdaki bit ya da bir 1 (ve bu durumda, sayısı bir tek sayı olduğu) ya da çift sayı olduğu durumda, bir 0'dır. Eğer & bir sayı, 1 ile, yalnızca en önemli bit bakmak ve çek eğer sayı 1 veya 0. Diğerleri de söylediğim gibi, bilgi için bitsel operatörleri bakarsanız açıksa nasıl çalışır.

Bu bitwise ve php hakkında bilmek de ilginç.

/**
 * regular
 */
echo (true && true); // 1
echo (true && false); // nothing

echo (true || false); // 1
echo (false || false); // nothing

echo (true xor false); // 1
echo (false xor false); // nothing

/**
 * bitwise
 */
echo (true & true); // 1
echo (true & false); // 0

echo (true | false); // 1
echo (false | false); // 0

echo (true ^ false); // 1
echo (false ^ false); // 0

Ikili sistemlerine temel olan iki operasyon OR ve AND vardır.

OR 'anlamına gelir ya da A üzerinde veya B açıksa'. Gerçek dünyada örnek paralel iki anahtar olacaktır. Her iki akım yoluyla izin veriyorsa, o sırada geçerli olan geçer.

'A ve B hem de ise' VE demektir. Gerçek dünyada örnek seri iki anahtarlar nedir. Her iki akım yoluyla izin varsa Güncel yalnızca geçecek.

Bir bilgisayar, bu fiziksel, anahtarlar, ancak yarı iletken değildir ve bunların işlevselliği logic gates denir. Onlar anahtarları gibi şeyler aynı tür yapmak - Mevcut veya hiçbir akıma tepki.

Tamsayılar uygulandığında, bir bit sayısı her diğer sayısında her bit ile birleştirilir. Yani bitsel operatörleri anlamak OR ve AND, eşleşen bit her çifti OR veya AND işlemi yapmak daha sonra, ikili numaralar dönüştürmek gerekir.

Bu nedenle:

00011011 (odd number)
AND
00000001 (& 1)
== 
00000001 (results in 1)

Oysa

00011010 (even number)
AND
00000001 (& 1)
==
00000000 (results in 0)

(& 1) işlemi, bu nedenle kullanılarak VE mantık 1 en sağdaki bit karşılaştırır. Şey ve bir şey başka bir şey değildir, çünkü tüm diğer bit etkili göz ardı edilir.

Ikili sistemlerine diğer temel işlemler NOT ve XOR içerir. 'A kapalı ise' anlamına gelir ve sadece bir sinyal veya iki yerine 'parametre' alır mantık kapısı sadece form DEĞİLDİR. XOR 'A ya da B ya da üzerinde ise, ancak her ikisi de' anlamına gelir. Ve sonra temelde sadece birlikte VE, VEYA DEĞİLDİR NXOR, ve XOR var NAND vardır, NOR, ve, yani NAND 'A ve B not hem de eğer' anlamına gelir.

Programlama, operatör

& means AND,
| means OR, 
~ means NOT, and
^ means XOR.

Diğerleri, örneğin, bu birleştirerek kadar yapılabilir:

~ (a & b) is equivalent to a NAND operation

PHP specific note

PHP, & operatör sadece tamsayılar üzerinde çalışır ve float değerleri örtük dönüştürülür. Tamsayılar olarak ifade edilebilir aralığın dışında sayılar sıfıra kesilir - yani, PHP_INT_MAX'tan üzerinde tüm numaralar ifadesinde "hatta" görüneceğini ($num & 1)). Eğer PHP_INT_MIN / PHP_INT_MAX'tan dışında numaralarını desteklemek istiyorsanız, ihtiyacınız olacak fmod($num, 2). Ancak, 64-bit PHP konum, eğer tamsayılar zaten yüzen daha büyük hassasiyet olacaktır.

Diğer yanıtlar yanı sıra, bu fazlalaştı

if(func1() && func2())

func1() ("tembel değerlendirme") true döndürür sadece func2() arayacak ise

if(func1() & func2())

Ne olursa olsun her iki işlevi arayacak, ancak her ikisi için doğruluk tabloları (onlar booleans dönmek varsayarak) aynı olacaktır.


thomasrutter muhtemelen pratikte ikinci yapmanız gerektiğini (aşağıdaki yorum) işaret etmektedir. (A & B), mutlaka (A && B) ile aynı truthiness olmaz özellikle A ve B tamsayılardır. örneğin, eğer A = 1 ve B = 2 (truthy ikisi de), A & Oysa && B, falsey olacak B truthy olduğunu. Ayrıca, başka bir geliştirici bu bir yazım hatası ve iki 'işareti it' doğru 'olduğunu düşünebilir.

Ben soru bitsel operatörünü anlamak hakkında bilmek ve kabul cevabı iyi açıklıyor. Ama vermek, örneğin, ben yardım edemem ama yerine modül operatörünü kullanabilirsiniz tavsiye edemez:

($var % 2) /* instead of */ ($var & 1)

Bu sayı (iki tarafından bölünebilir değil) garip olduğunu kontrol ediyoruz, ve daha genel olduğu niyet açıkça, yani ($ var% 3) aynı şekilde kullanabilir ve herhangi N. nasıl çalıştığını anlamak olabilir çünkü