Jawaban:
Sama seperti &
dan &&
operator, Operator ganda adalah operator "hubungan singkat".
Sebagai contoh:
if(condition1 || condition2 || condition3)
Jika kondisi1 benar, kondisi 2 dan 3 TIDAK akan diperiksa.
if(condition1 | condition2 | condition3)
Ini akan memeriksa kondisi 2 dan 3, bahkan jika 1 sudah benar. Karena kondisi Anda bisa menjadi fungsi yang cukup mahal, Anda bisa mendapatkan peningkatan kinerja yang baik dengan menggunakannya.
Ada satu peringatan besar, Referensi Null atau masalah serupa. Sebagai contoh:
if(class != null && class.someVar < 20)
Jika kelas adalah nol, pernyataan-if akan berhenti setelah class != null
itu salah. Jika Anda hanya menggunakan &, itu akan mencoba memeriksa class.someVar
dan Anda mendapatkan yang bagus NullReferenceException
. Dengan Operator-Or yang mungkin tidak terlalu banyak perangkap karena Anda tidak mungkin memicu sesuatu yang buruk, tetapi itu sesuatu yang perlu diingat.
Tidak ada yang pernah menggunakan tunggal &
atau |
operator, kecuali jika Anda memiliki desain di mana setiap kondisi adalah fungsi yang HARUS dieksekusi. Kedengarannya seperti bau desain, tapi kadang-kadang (jarang) itu cara yang bersih untuk melakukan sesuatu. The &
Operator tidak "menjalankan 3 fungsi-fungsi ini, dan jika salah satu dari mereka mengembalikan false, jalankan lain blok", sementara |
tidak "hanya menjalankan blok lain jika tidak ada return false" - dapat bermanfaat, tetapi sebagai kata, sering itu desain bau.
Ada penggunaan kedua dari |
dan &
operator: Operasi Bitwise .
&
dan |
sebagai operator bersyarat adalah peretasan, dan akan membuat mereka dalam kesulitan jika mereka perlu menggunakan C / C ++: 1 && 2
benar sementara 1 & 2
itu salah.
&
untuk menyampaikan makna selain apa yang hampir selalu berarti: bitwise-and) .
|| adalah operator OR logis. Sepertinya pada dasarnya Anda tahu apa itu. Ini digunakan dalam pernyataan bersyarat seperti jika, sementara, dll.
condition1 || condition2
Mengevaluasi ke true jika salah satu kondisi1 ATAU kondisi2 benar.
| adalah operator bitwise OR. Ini digunakan untuk beroperasi pada dua angka. Anda melihat setiap bit dari masing-masing angka secara individual dan, jika salah satu bit adalah 1 di setidaknya satu dari angka, maka bit yang dihasilkan akan menjadi 1 juga. Berikut ini beberapa contoh:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
Semoga itu masuk akal.
Jadi untuk menjawab dua pertanyaan terakhir, saya tidak akan mengatakan ada peringatan selain "tahu perbedaan antara kedua operator." Mereka tidak dapat dipertukarkan karena mereka melakukan dua hal yang sama sekali berbeda.
Pertanyaan bagus. Kedua operator ini bekerja sama dalam PHP dan C #.
|
adalah bitwise OR. Ini akan membandingkan dua nilai dengan bit mereka. Misalnya 1101 | 0010 = 1111. Ini sangat berguna saat menggunakan opsi bit. Misalnya Baca = 01 (0X01) Tulis = 10 (0X02) Baca-Tulis = 11 (0X03). Salah satu contoh yang bermanfaat adalah membuka file. Contoh sederhana adalah:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||
adalah OR logis. Ini adalah cara kebanyakan orang berpikir tentang ATAU dan membandingkan dua nilai berdasarkan kebenaran mereka. Misalnya saya pergi ke toko atau saya akan pergi ke mal. Ini adalah yang paling sering digunakan dalam kode. Sebagai contoh:
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
Sumber Daya PHP: http://us3.php.net/language.operators.bitwise
Sumber Daya C #: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
|
adalah logis atau ketika diterapkan ke boolean . Seperti yang dinyatakan oleh referensi Anda. Dalam praktiknya, hasil akhirnya sama seperti jika operator bitwise, karena nilai bitwise dari true
dan false
sedemikian rupa sehingga bitwise atau nilainya menghasilkan hasil yang sama persis dengan yang logis atau tidak. Yaitu (int)(bool1 | bool2)
== ((int)bool1) | ((int)bool2)
.
Contoh sederhana dalam java
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;
}
}
keluaran:
using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
& - (Kondisi 1 & Kondisi 2): memeriksa kedua kasus meskipun yang pertama salah
&& - (Kondisi 1 && Kondisi 2): dosen tidak perlu repot memeriksa kasus kedua jika yang satu salah
&& - operator akan membuat kode Anda berjalan lebih cepat, secara profesional & jarang digunakan
| - (Kondisi 1 | Kondisi 2): memeriksa kedua kasus meskipun kasus 1 benar
|| - (Kondisi 1 || Kondisi 2): dosen tidak perlu repot memeriksa kasus kedua jika yang pertama benar
|| - operator akan membuat kode Anda berjalan lebih cepat, secara profesional | jarang digunakan
rarely used
? Semua tergantung pada apa yang ingin atau perlu Anda lakukan.
Pipa tunggal, |, adalah salah satu operator bitwise .
Dari Wikipedia:
Dalam keluarga bahasa pemrograman C, operator bitwise OR adalah "|" (pipa). Sekali lagi, operator ini tidak boleh bingung dengan rekan "logis atau" Boolean, yang memperlakukan operan sebagai nilai Boolean, dan dituliskan "||" (dua pipa).
Menurut definisi matematika mereka, OR dan AND adalah operator biner; mereka memverifikasi kondisi LHS dan RHS terlepas, mirip dengan | dan &.
|| dan && mengubah properti operator ATAU dan DAN dengan menghentikannya ketika kondisi LHS tidak terpenuhi.
The | operator melakukan bitwise ATAU dari dua operan (yang berarti kedua belah pihak harus mengevaluasi false untuk mengembalikan false) sementara || operator hanya akan mengevaluasi operator kedua jika perlu.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
Pipa menghanguskan "|" adalah "bitwise" atau dan seharusnya hanya digunakan ketika Anda tahu apa yang Anda lakukan. Pipa ganda "||" adalah logis atau, dan dapat digunakan dalam pernyataan logis, seperti "x == 0 || x == 1".
Berikut adalah contoh dari apa yang bitwise atau lakukan: jika a = 0101 dan b = 0011, maka a | b = 0111. Jika Anda berurusan dengan sistem logika yang memperlakukan non-nol sebagai benar, maka bitwise atau akan bertindak dengan cara yang sama dengan yang logis atau, tetapi itu counterpart (bitwise dan, "&") TIDAK akan. Juga bitwise atau tidak melakukan evaluasi hubung singkat.
bool
tipe tanpa hubungan arus pendek.
Pipa tunggal (|) adalah operator bitwise OR .
Dua pipa (||) adalah operator OR logis.
Mereka tidak bisa dipertukarkan.