PHP 或者 JavaScript 這些弱類型 的|| 和 | 的區別, 附代碼;

來源:互聯網
上載者:User
關鍵字 php javascript

下面是實驗代碼:用php 寫的,JavaScript應該也差不多:

我發現,php 和 JavaScript 差多了! 我附加 運行結果 和 代碼:

        區別 | || or \& \& and
';echo '這裡是$p = 6 or 0'.'結果,是【';$p = 6 or 0;var_dump($p);//int(6)echo '】

';echo '這裡是$p = 6 | 0'.'結果,是【';$p = 6 | 0;var_dump($p);echo '】

';echo '這裡是$p = 6 || 0'.'結果,是【';$p = 6 || 0;var_dump($p);//bool(true)echo '】

';echo '

';echo '這裡是$p = 6 and 0'.'結果,是【';$p = 6 and 0;var_dump($p);echo '】

';echo '這裡是$p = 6 & 0'.'結果,是【';$p = 6 & 0;var_dump($p);echo '】

';echo '這裡是$p = 6 && 0'.'結果,是【';$p = 6 && 0;var_dump($p);echo '】

';

這個剛開始學就稀裡糊塗的,我搜了搜資料,也不明白,靠譜的結論是 = 優先順序 大於 | , &,
我還是不明白...
其實 | 和 & 好理解,就是|| 和 && 不理解,還望大牛解答..

回複內容:

下面是實驗代碼:用php 寫的,JavaScript應該也差不多:

我發現,php 和 JavaScript 差多了! 我附加 運行結果 和 代碼:

        區別 | || or \& \& and
';echo '這裡是$p = 6 or 0'.'結果,是【';$p = 6 or 0;var_dump($p);//int(6)echo '】

';echo '這裡是$p = 6 | 0'.'結果,是【';$p = 6 | 0;var_dump($p);echo '】

';echo '這裡是$p = 6 || 0'.'結果,是【';$p = 6 || 0;var_dump($p);//bool(true)echo '】

';echo '

';echo '這裡是$p = 6 and 0'.'結果,是【';$p = 6 and 0;var_dump($p);echo '】

';echo '這裡是$p = 6 & 0'.'結果,是【';$p = 6 & 0;var_dump($p);echo '】

';echo '這裡是$p = 6 && 0'.'結果,是【';$p = 6 && 0;var_dump($p);echo '】

';

這個剛開始學就稀裡糊塗的,我搜了搜資料,也不明白,靠譜的結論是 = 優先順序 大於 | , &,
我還是不明白...
其實 | 和 & 好理解,就是|| 和 && 不理解,還望大牛解答..

題主修改題目,增加了js的內容,我也補充下js相關的答案:
js的位元運算(|&)和php類似,不詳述。主要說明下邏輯運算的不同。

很多程式設計語言(包括js,但不包括php)基於效能考慮,對邏輯運算有個最佳化

對And運算 a = b && c, a的值為:如果b邏輯上為真,返回c; 否則返回b
對Or運算 a = b || c, a的值為: 如果b邏輯上為真,返回b; 否則返回c
給幾個例子

a = 1 && 2;         // 1a = null && 2;      // nulla = 'str' || 2;     // 'str'a = undefined || 2; // 2

其實使用下面的例子可以更直觀表現

function c() {    console.log('這裡不會調用');}a = null && c();  // a 為 null

因為&&前面為假,所以直接返回null,後面的函數c()不會被調用。

(原理我就不細說了,知道是效能最佳化就夠了。如果你是電腦專業出身,上理論課時候肯定講過,只不過當時可能沒認真聽。)

以下是針對PHP的原答案
正好有時間,我就細說下。

首先 and or && || 都是邏輯運算子,功能完全相同,唯一區別只有優先順序: && || > 賦值運算子(=) > and or;

你的測試代碼裡有個不太明顯的坑。
因為優先順序:|| > = > or, 所以

$p = 6 or 0;

實際上的運算順序是

($p = 6) or 0;  // $p 為 6

如果改成

$p = (6 or 0);  // $p 為 true

就和使用||一致了。

2、而 & | 是位元運算符,和上面的不是一種運算。
位元運算符是將數位每一位相應進行邏輯運算得出的結果,比如

$b = (10 | 12);  // $b 為 14

10(二進位為1010)和12(二進位1100)位與運算,得到14(二進位1110)

在JS中|| ,&& 用的蠻多的

位元運算的邏輯運算是不同的,希望再去看點書。|和&是位元運算,|| 和&&是邏輯運算

絕大部份語言都有&&和||符號吧,意義幾本都一樣,都是作為邏輯符,你這麼問,我都感覺你沒學過編程...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.