Ve | | | veya operatörler arasındaki fark nedir?

10 Cevap

Ben her zaman || (iki boru) VEYA ifadeler, C # ve PHP hem de kullandık. Bazen ben kullanılan tek bir boru bakın: |. Bu iki kullanımları arasındaki fark nedir? Diğeri üzerinde birini kullanarak ya da değiştirilebilir olduğunda herhangi uyarılar vardır?

10 Cevap

Sadece ve benzeri ve && operatör, çift Operatör bir "kısa devre" operatörüdür.

Örneğin:

if(condition1 || condition2 || condition3)

Condition1 doğruysa, durum 2 ve 3 kontrol edilmeyecektir.

if(condition1 | condition2 | condition3)

1 Zaten doğru olsa bile, bu, koşulları 2 ve 3 kontrol edecektir. Şartlarınız oldukça pahalı fonksiyonlar olabilir gibi, bunları kullanarak iyi bir performans artışı elde edebilirsiniz.

There is one big caveat, NullReferences or similar problems. Örneğin:

if(class != null && class.someVar < 20)

Sınıf null ise, if ifadesinin "class! = Null" sonra duracaktır yanlıştır. Eğer sadece kullanmak ve eğer, bu class.someVar kontrol etmek için çalışacağız ve güzel bir NullReferenceException olsun. Or-İşletmeci ile size kötü bir şey tetikleyebilir olası olduğu gibi bu bir tuzak o kadar olmayabilir, ama akılda tutulması gereken bir şey var.

Hiç kimse tek ve kullanır veya | operatörleri olsa da, her koşul yürütülecek HAS bir fonksiyonu olan bir tasarıma sahip olmadıkça. Bir tasarım koku gibi geliyor, ama bazen (nadiren) o şeyler yapmak için temiz bir yoldur. & Operatör, "Bu 3 fonksiyonları çalıştırmak, ve bunlardan biri false döndürürse, else bloğu çalıştırmak" yok iken | "none return false yalnızca else bloğu çalıştırmak" yok - yararlı olabilir, ancak dedi, sık sık bir dizayn kokusu.

Orada bir ikinci kullanımı | ve & Operatör olsa: Bitwise Operations.

| | Mantıksal VEYA operatörüdür. Temelde ne olduğunu biliyor gibi geliyor. Böyle iken, vs, gibi koşullu tablolarda kullanılan

condition1 || condition2

Condition1 VEYA condition2 doğruysa true değerlendirir.

| Bitsel OR operatörü. Bu iki sayı üzerinde çalıştırmak için kullanılır. Bu bitlerin bir sayılardan en az birinde 1 ise, o zaman elde edilen bit da 1 olacaktır, her bir dizi, her bit bakıp. İşte birkaç örnek:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

Umarım mantıklı.

Yani son iki soruyu yanıtlamak için, ben dışında herhangi uyarılar vardır söyleyemem "iki operatörler arasındaki farkı biliyorum." Iki tamamen farklı şeyler çünkü onlar değiştirilebilir değil.

Bir bir "bit veya".

10011b | 01000b => 11011b

Diğer bir mantık ya.

doğru veya yanlış => true

İyi bir soru. Bu iki operatörler PHP ve C # aynı iş.

| Bir bit OR. Onların bit iki değeri karşılaştırmak olacaktır. Örneğin 1101 |. Bit seçeneklerini kullanırken 0010 = 1111 Bu son derece yararlıdır. Örneğin (0x01) 10 (0X02) Oku-Yaz = 11 (0x03) = yaz = 01 okuyun. Bir yararlı örnek dosyaları açma olacaktır. Basit bir örnek olacaktır:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

| | Mantıksal VEYA olduğunu. Bu insanların çoğu OR düşünmek yoludur ve gerçeğe dayalı iki değerleri karşılaştırır. Örneğin Ben mağazaya gidiyorum ya da alışveriş merkezine gidecek. Bu kodda en sık kullanılan biridir. Örneğin

if(Name == "Admin" || Name == "Developer) { //allow access } //checks if name equals Admin OR Name equals Developer

PHP Kaynak: http://us3.php.net/language.operators.bitwise

C # Kaynaklar: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx

Java Basit bir örnek

public class Driver {

  static int x;
  static int y;

public static void main(String[] args) 
throws Exception {

System.out.println("using double pipe");
    if(setX() || setY())
        {System.out.println("x = "+x);
        System.out.println("y = "+y);
        }



System.out.println("using single pipe");
if(setX() | setY())
    {System.out.println("x = "+x);
    System.out.println("y = "+y);
    }

}

 static boolean setX(){
      x=5;
     return true;
  }
 static boolean setY(){
      y=5;
      return true;
  }
}

çıktı:

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5

Tek boru, |, bitwise operatörlerinden biridir.

Vikipedi:

(Boru) | "" C programlama dili ailesinde, bitsel OR operatörü. (Iki boru) | "|" Yine, bu operatör Boole değerleri olarak işlenen davranır onun Boole "mantıksal veya" mevkidaşı ile karıştırmamak gerekir, ve yazılır.

| Operatörü bitsel gerçekleştiren OR iki işlenen (o return false için her iki tarafı anlam yanlış olarak değerlendirmek gerekir) ise | | buna ihtiyacı varsa operatör sadece ikinci operatörü değerlendirecektir.

http://msdn.microsoft.com/en-us/library/kxszd0kx (VS.71). aspx

http://msdn.microsoft.com/en-us/library/6373h346 (VS.71). aspx

Ateşten boru "|" "bit" ya ve siz ne yaptığınızı biliyorsanız kullanılmalıdır. Çift boru "| |" mantıksal ya da, ve "x == 0 | | x == 1" gibi, mantıksal ifadeleri kullanılabilir.

İşte ne bitsel bir örnek ya da yapar: Eğer a = 0101 ve b = 0011, daha sonra a | b = 0111. Eğer gerçek olarak herhangi bir olmayan sıfır, bit davranır veya mantıksal ya da aynı şekilde hareket edecek bir mantık sistemi ile uğraşıyoruz, ama muadili (bitsel ve "&") ise göremeyiz. Ayrıca bitsel veya kısa devre değerlendirme yapmaz.

Tek bir boru (|) bitwise OR operator olduğunu.

Iki boru (| |) mantıksal OR operatörü.

Bunlar değiştirilebilir değil.

| | (Bir boru) bir binary ya da |. (Iki boru), genellikle bir logical veya yaparken Kafamın üst kapalı, herhangi bir zaman farkı (başka bir şey için sonuç atama yaparken dışında) büyük bir yakaladım olacağını düşünemiyorum. Ancak Eminim başkası bu konularda bir durum olacaktır.

Düzenleme: Vay, bu yazmak götürdü sürede altı diğer yanıtlar.