[ week 2 ] 打造 JaveScript 的基礎 - 基本運算 &位元運算


Posted by vick12052002 on 2020-06-21

執行環境

JaveScript 是不能單獨執行的,他需要仰賴執行環境(runtime),而目前執行環境較常見的有兩種 「 瀏覽器、node.js 」。

在上次 week1 中的作業,我有提到 node.js,其實他並不是一個程式語言,功能是可以運作 JaveScript 的一個執行環境 (runtime),那平常沒用 node.js 作為執行環境時,瀏覽器就是我們的執行環境,他會提供 JaveScript 操控頁面上元素的方法。

而 node.js 是可以實現在自己電腦上運作 JaveScript 的執行環境,所以相對於瀏覽器,他就沒有什麼 document.getElementById...讀取 DOM 之類的方法,但是他擁有一系列的模組,當中有一個操作文件的模組名為fs模組,fs 為 file system 的簡寫,可以讀取、寫入檔案。

所以我們統整一下兩個執行環境的差異:

瀏覽器:

方法-提供 DOM 的來操作頁面上元素的動態變化
觀測地點-瀏覽器中的開發者工具中的 console

node.js:

方法-fs 模組( file system ),可以讀取、寫入檔案。
使用、觀測地點-在自己電腦的 cmd 上運作 >

共同功能

共同功能 console.log ,雖是相同功能,但呈現方式不一定一樣必須注意


基本運算

  1. 加減乘除或餘數 (+-*/%)
    就是一般的加減乘除,% 這個是餘數

    特別注意,在 cmd 下使用 node.js 的執行環境,若要運算值,請務必加上 console.log (運算程式),否則會出錯

  2. 邏輯運算 ( && || ! )
    && 、 || 、 ! 分別代表「 && and 」、「 || or 」、「 ! not 」

    短路性質 ||、 && 差異

    前 || 後
    如果 || 前,它的值是 true ,他就會回傳 「 前面的值 」,
    相對的,
    如果 || 前,它的值是 false ,他就會回傳 || 「 後面的值 」

    很直覺「 假的值 」,在 JaveScript 裡只要是 0、""、null、false、undefined、NaN ,就會回傳false

    前 && 後

    如果 && 前,它的值是 true ,他會回傳 「 後面的值 」。
    相對的,
    如果 && 前,它的值是 false , ,他就會回傳 &&「 前面的值 」

結論

|| or 前,如果是 false 就會印出 後面的值,往後找值
&& and 前,如果是 false 就會印出 前面的值,不往後找


位元運算

1.位移運算 ( >> 右移 、 << 左移 )
是針對位元(bit)操作,使用位移運算,因為是調用電腦最原始的形式( 二進位 ),所以在運算的效能通常會比較好

  • >> 右移
    與二進位有關,電腦在運算向右移 __ 個單位,可視為除以幾個 2
     10 >> 1  (可視為 10 除以 1 個 2)
     = 5  (得到答案為 5 )
    

    如果右移,不能整除,運算會無條件捨去,
    10 >> 2 (10 無法整除 2 個 2 < 就是 4 > )
    可以看成 10 \ 4 這個算式 ,但不能整除,會有餘數 2 ,電腦會自動捨去餘數
    = 2

  • << 左移
    與二進位有關,電腦在運算向右移 __ 個單位,可視為乘以幾個 2
    10 << 1  (可視為 10 乘以 1 個 2)
    = 20  (得到答案為 20 )
    

2.位元運算 ( and & 、 or | 、 xor^、 not~ )

位元運算會將要運算的值,轉化成 「 二進位 」 的形式,來執行運算,最後再輸出結果,所以與 邏輯運算 的答案會不同。

位元運算 與 邏輯運算( 會有短路性質 ) 的差異
位元運算只有 單一符號,例如:&、|、 ^、~

10 & 15 (位元運算,需要轉換成二進位)
二進位表示法,如下:
     1010
 and 1111
   ------
     1010 
(可以看成有 0 就會有 0)
 10 | 1 (位元運算,需要轉換成二進位)
 二進位表示法,如下:
     1010
 or  0001
   ------
     1011 

(可以看成有 1 就會有 1)
1011(二進位表示) = 11 (十進位表示)
 10 || 1(邏輯運算)
= 10

比較特別的是 xor 的使用,轉換成二進位模式,若運算兩個值相同,就會回傳 0 ,
在 JaveScript 中,使用這個符號呈現,但在一般運算式這個符號代表的是次方的運算

    1010
xor 1111
   -----
    0101 (得到的值會是 0101 )
10 ^ 15 
= 5

not 的運用,是以 ~呈現,在 JaveScript 的運算中,會整個反轉 1 會變成 0 ;而 0 會變成 1

 ~15
= -16

有一個快速判斷參數是「 奇數 」還是「 偶數 」的方法,可以運用 & 1 快速做判斷。

17 & 1
= 1  若等於 1 ,就代表該數是「 奇數 」

反之

16 & 1  
= 0   若等於 0,就代表該數為「 偶數 」

參考資料

使用 Node.js 讀取及寫入檔案
[JS101] 用 JavaScript 一步步打造程式基礎
二進位是什麼


#Bitwise #node.js #javescript #程式導師







Related Posts

圖論(Graph Theory)

圖論(Graph Theory)

自定義 Python 模組

自定義 Python 模組

Ruby module: Include、extend 和 prepend

Ruby module: Include、extend 和 prepend


Comments