[第二週] 基礎JavaScript - 01 邏輯、位元運算 - Yakim shu

文章推薦指數: 80 %
投票人數:10人

回憶起大四的時候去學校圖書館找JavaScript 的書( 而當時的我借到的其實是Java 的事就不提了... ),其他的運算子都非常好懂,直到翻開位元運算的那 ... [第二週]基礎JavaScript-01邏輯、位元運算 介紹Node.js Node.js是一個JavaScript的執行環境。

在Node.js出現之前,JavaScript只能在瀏覽器上運行,Node.js就是提供Javascript除了瀏覽器以外的運行環境。

執行方法: node 或是直接執行node,再輸入你的程式 題外話小技巧 如何快速打開VScode 先照此教學安裝指令:如何以CLI啟動VSCode? 以後要在Terminal快速開啟VScode就簡單了! code.:新增工作目錄 code:開啟檔案 快速開啟瀏覽器的開發人員工具 快捷鍵:option+cmd+i 基本邏輯的短路性質 以前對於||、&&邏輯運算子的看法是,不就是以前國中學過的嗎?這麼簡單有什麼好講的,但當時看JavaScript犀牛書的時候不禁讚嘆:「原來還可以這樣?!」,不過這節還是補充了以前不知道的資訊,太好了! 注意 在JavaScript裡,代表false的就只有幾個:0、-0、NaN、null、undefined、""(←空字串),所以搞清楚false還蠻重要的喔,不然往後的日子應該有很多坑可以跳。

剛好複習一下當時的筆記: Javascript大全-01型別、值與變數 Javascript大全-02運算式與運算子 ||邏輯運算子OR 只要找到第一個true,會回傳true的值,不再繼續查找後面的值。

全部都為false,會回傳最後一個為false的值 undefined||0||"hello"||false//找到true回傳 >"hello" NaN||0||undefined||""||null//全部都為false,回傳最後一個false的值 >null &&邏輯運算子AND 只要找到第一個false,會回傳false的值,不再繼續查找後面的值。

全部都為true,會回傳最後一個為true的值 "hello"&&10&&""&&1//找到false回傳 >"" 10&&"world"&&1//全部都為true,回傳最後一個true的值 >1 位元運算 位元運算真的很有趣,今天整個下午都花在這了,吳鎮宇說的沒錯:「出來混,遲早要還的」一度逃避的東西還是被默默回來找你。

大四的時候很想學網頁,學姊跟我說:「可以去看JavaScript。

」,然後就去了學校圖書館找JavaScript的書,其他的運算子都非常好懂,直到翻開位元運算的那一頁,就沒有再翻過下一頁了。

(而且後來才發現我借到Java…) (回到正題,跳一下) 要了解什麼是位元運算,首先要介紹位元位移,要知道什麼是位元位移,首先要有2進位的觀念。

(不難、先不要崩潰) 2^i 2⁵ 2⁴ 2³ 2² 2¹ 2⁰ 數字 值 32 16 8 4 2 1   範例A 0 1 1 0 1 0 16+8+2=26 範例B 1 0 0 1 0 1 32+4+1=37 意思是說26的二進制表示法為011010、37的二進制表示法為100101。

>>、<>位元右移 n>>i:n除以2的i次方 n>>1:往右移1位:等於n/2 n>>2:往右移2位:等於n/4 <>1→001101//等於26>>1等於26/2==13 A:011010>>2→000110//等於26>>2等於26/4==6(餘數無條件捨去) 那這樣很不直覺的運算到底能幹嘛呢? 答案是在效能上有所差異,因為電腦只認得二進制的機器碼,所以照理來說,同樣得出n*2的運算結果,n<<1會比n*2還要來得快。

|、&、^位元運算子 注意: 不要把位元運算子|、&跟邏輯運算子||、&&搞混了,可以把位元運算子理解成2進位版的邏輯比較。

|位元OR 當成位元間的||,以0011|1001(3|9)為例,會回傳1011(11) |運算結果 1 0 1 1 11 範例A 0 0 1 1 3 範例B 1 0 0 1 9 可以拆解成以下步驟: -2^3→0||1→1 -2^2→0||0→0 -2^1→1||0→1 -2^0→1||1→1 &位元AND 當成位元間的&&,以0011&1001(3&9)為例,會回傳0001(1) &運算結果 0 0 0 1 1 範例A 0 0 1 1 3 範例B 1 0 0 1 9 可以拆解成以下步驟: -2^3→0&&1→0 -2^2→0&&0→0 -2^1→1&&0→0 -2^0→1&&1→1 ^位元XOR 最特別的一種,只有當兩邊是一樣的:0^0和1^1的時候才會回傳0。

同樣以0011^1001(3^9)為例,會回傳1010(10) ^運算結果 1 0 1 0 10 範例A 0 0 1 1 3 範例B 1 0 0 1 9 可以拆解成以下步驟: -2^3→0^1→1 -2^2→0^0→0 -2^1→1^0→1 -2^0→1^1→0 注意: 上面的2^3,是為了方便表示2的3平方,不要跟^位元運算子搞混了。

應用 又回到每天都要問的問題,所以到底能幹嘛勒?! 做個小實驗,把任意數字n跟1做&位元運算會發生什麼事? n&1→1,代表n的最後1個位元數(2⁰)是1 n&1→0,代表n的最後1個位元數(2⁰)是0 猜出來了嗎?將n&1是判斷n是奇數or偶數的小技巧。

除了使用n%2“取餘數“的傳統方式,n&1是個效能更好的方法。

10&1→0//偶數 11&1→1//奇數 再把任意數字n跟2的任意平方做&位元運算會發生什麼事? n&4→1,代表n的倒數第3個位元數(2²)是1 n&4→0,代表n的倒數第3個位元數(2²)是0 … 以此類推下去,有點類似遮罩的概念 結論 本章學到兩個效能更好的實用小技巧,稍微複習一下: n>>1效果如同n/2 n<<1效果如同n*2 n&1效果如同n%2→1,代表n為奇數 n&1效果如同n%2→0,代表n為偶數 (以上內容大部分是程式導師實驗計畫第三期的學習筆記,如有錯誤歡迎糾正,非常感謝🤓) Writtenon April 22nd , 2019 byYakimshu Feelfreetoshare! Youmayalsoenjoy: [第二週]基礎JavaScript-03函式Function [第二週]基礎JavaScript-02變數



請為這篇文章評分?