Re: [問題] 關於 | 與 || 和 & 與 && 的差別 ??
※ 引述《takashi737 (小兔)》之銘言:
: ※ 引述《yhn0tgb60 (呦厚厚)》之銘言:
: : 如題
: : 也就是邏輯運算子跟位元運算子的差別
: : 好像用法上都一樣是嗎???
: : 謝謝了
: | 和 & 是邏輯運算元; || 和 && 是 前者的short-circuit
: ex:
: int a = 1, b =2;
: (b > a) | (a < 0) --> true | false --> return true
: 此運算會先運算(a < b),不論傳回 true 或 false 皆會執行下一組(a < 0)
: ---------------------------------------------------------------------
: (b > a) || (a < 0)
: 也是會先運算(b > a),若傳回 true, 則不會執行下一組(a < 0)
: (b < a) || (a < 0)
: 會先運算(b < a), 若傳回 false,則會執行下一組(a < 0)
: 參考猛虎考試書
剛剛做了點小實驗,結果無法判斷,只好再去找官網
實驗很簡單
int i1=(0|1);
int i2=(true|false);
int i3=(1|false);
boolean b1=(0|1);
boolean b2=(true|false);
boolean b3=(1|false);
編譯的結果是i2和b1需要強制轉型、i3和b3則出現
operator | cannot be applied to int,boolean
的結果
官網的說明則有清楚的定義
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
The bitwise & operator performs a bitwise AND operation.
The bitwise ^ operator performs a bitwise exclusive OR operation.
The bitwise | operator performs a bitwise inclusive OR operation.
而在 Equality, Relational, and Conditional Operatorsperation 頁面上
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op2.htmltwise
則完全沒有提到&、|這兩個operator
當然官網說明不見得100%正確
不過這倒是讓我很好奇倒底書上的正確還是官網的正確了
以實驗結果而言,應是對|做了overloading(如同+一樣)
一開始我覺得書上所說的應該不正確,畢竟一個operator有兩種不太相同的意思,
感覺好像怪怪的,但回心一想+,也就釋然了
至於事實如何,我想到的驗證方式是將無最佳化的bytecode反組譯,看是怎麼做的
反組譯苦手,也許哪位大大有空可以代為解惑一下?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.217.238
推
07/29 20:25, , 1F
07/29 20:25, 1F
推
07/29 20:30, , 2F
07/29 20:30, 2F
推
07/29 20:49, , 3F
07/29 20:49, 3F
推
07/29 20:50, , 4F
07/29 20:50, 4F
推
07/29 22:24, , 5F
07/29 22:24, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):