Paper 1A (MC)
Learn from your mistakes.
Learn from your mistakes.
第一位
2022 MC20 (7% correct)
File storage calculations
第二位
2016 MC02 (18% correct)
Memory storage of 'HKDSE5'
第三位
2013 MC32 (19% correct)
Comparing two searching pseudocode S1, S2
第四位
2013 MC12 (21% correct)
Document hyperlink and page number
睇過過去十年 DSE MC,及考評局的年報,我們找到一堆考生常出問題的基礎 concepts,以下逐一 highlight。
4.1 Binary combinations (2n)
二進制,是電腦架構的基礎。因為電腦是機器,只能用「開」與「關」去表達資料,這就剛好同數學入面的二進制不謀而合。一般教科書不會刻意把 DSE 數學科的 Tree diagram 用來解釋 2n 公式的由來,但其實數學同電腦有極密切的關係,畢竟大家也是 STEM 的一份子,用 Tree diagram 來解釋就十分視覺化 👀
1 個 bit,有 2 個 combinations,就喺 0 同 1。2 個 bit,有 4 個 combinations,就喺 00,01,10 同 11。留意 4 喺來自 2 x 2 而唔喺 2 + 2。3 個 bit,有 8 個 combinations (23),就喺 000,001,010,011,100,101,110 同 111。即喺每加多 1 個 bit,combinations 就會 x 2 (doubled),所以如果喺 n bit,combinations 就喺 2n。
右邊個圖,同樣可用來解釋點解 1 個 hexadecimal digit = 4 bit,因為 24 = 16。調轉頭講,用 4 bit,就可以表達到 16 個 combinations (patterns),啱啱夠 16 個 hexadecimal digits。
按此進入 CoSpaces 互動:https://edu.cospaces.io/HTB-VED
二進制表示法 The Power of the Bits
從另一角度解二進制,廣東話 Siri 聲音導航。
4.2 Two's complement (二補碼) overflow error
這是近乎每年考生都答得唔好的題目,是死穴,證明所需概念複雜。以 DSE 考試常出現的 8-bit two's complement code 為例,首先 0 字頭的 code 是正數,1 字頭的 code 是負數。所以,最大的數是 0111 1111 (+127),最細 (最負) 的數是 1000 0000 (–128)。如果用數學科的 number line 表達,就會喺右邊個圖咁 👉🏻
電腦在運算過程中,只要產生一個大於 +127 或少於 –128 的數,就會產生 overflow error。最簡單莫過於是 127 + 1, 結果本應是 +128, 但如果用 8-bit two's complement 計,竟得出 –128 😱 再見右圖 👉🏻
無他,就喺因為只得 8 個 bit,如果有多 1 個 bit,好似上面個 Binary Tree diagram 所講,就能夠表達 2 倍 (即多 1 倍) 的數字,咁樣 127 + 1 就唔會產生 overflow error。
當然,如果是計 –128 + (–1),也同樣產生 overflow error,因為 -129 用 8-bit two's complement 喺無辦法表達 🤷🏻♂️
最後,有以下兩個問題值得思考:
點解一個正數加一個負數,喺唔會產生 overflow error 呢?
一但 overflow error 不幸產生了😢 CPU 那個 register 會知道呢?
二補碼 - 溢出錯誤 Overflow error
從另一角度解 overflow error,廣東話 Siri 聲音導航。
4.3 搵 Two's complement (二補碼) 有 shortcut
傳統搵一個 binary code 的 two's complement,就喺將所有 0 轉晒 1,所有 1 轉 晒 0, 然後 +1。
例如:0100 1110 的 two's complement 就即喺 1011 0001 + 1 = 1011 0010 👉🏻
但呢個做法,如果要將負數的 code 轉番 denary/decimal 就幾麻煩😵💫
例如搵上面個 code 1011 0010 =?
按 textbook 做法喺 –(0100 1101 + 1),然後加起晒所有 1 嘅位值 (place value)。但其實,根本唔洗咁麻煩,只需要將 1011 0010 第一個 1 寫成 –128,然後加起晒剩低嘅 1 位值就可以 🕺🏻
呢個方法我喺睇其他國家的電腦科老師 YouTube 影片時知道,數學上喺證明得到 work,這個 proof 就留比大家去發掘啦 😄
4.4 點解 –1 喺 8個 1 (1111 1111)? 🤔
Two's complement 其實喺一個非常不直觀的表達方式,因其核心精神只喺要做啱加減數就 OK。以 8-bit 為例,如果 +1 喺 0111 1111,0 喺 0000 0000,咁樣 –1 應該喺乜嘢,以致 1 + (–1) =0? 即 0000 0001 +???? ???? = 0? 👉🏻
結果,就喺 8 個 1 (1111 1111) KO 咗呢個問題 👉🏻
留意 0000 0001 + 1111 1111 = 1 0000 0000,多出來的第 9 個 bit 是會自然被消失(discard),這個情況同 overflow error 喺冇關係的 🤷🏻♂️ 原因是既然電腦用了 8-bit 儲存一個數,就根本不存有第 9 bit 的 memory 去記住第 9 個 bit 😅 所以這個 bit 是必然消失,而當然現實世界的電腦系統要儲存一個整數,喺各種 bit 數都有:4, 8, 16, 32, 64, 128, ...
https://en.wikipedia.org/wiki/Integer_(computer_science)
4 bit 二補碼 Two's Complement Representation
從另一角度解二進制,廣東話 Siri 聲音導航。
4.5 Fetch - Decode - Execute 是另一死穴?
近年經常翻出的 topic,出一題,就重創一題 😇 因為這個 CPU operations 課題是抽象又難學得好,純粹是 concepts,也欠缺實體操作。基本上 Fetch-Decode-Execute 的 cycle 就如下圖,公開試經常問 fetch instruction 時會涉及那個 component / register,只得個「記」字,當然也可煲片,「洗腦式」學習始終有其理論基礎及效益。以下有些影片已是 7 年的製作,以今時今日角度看,難免有進步空間,大家包容包容 😘
Fetch cycle (1 of 2)
Fetch cycle (2 of 2)
Decode cycle
Execute cycle
4.6 Dry-run pseudocode (with loops, array)
Programming 必考 standard 題型,比一段 pseudocode 考生,要求 dry-run 並找 output,做法是十分 standard,先劃 dry-run table,第一行填 variable names,最好按 variables 在 pseudocode 出現嘅次序,如有 array 則劃埋 array。然後當自己喺電腦嘅 CPU 同 RAM ,逐行逐行 run 個 program,就喺咁 👉🏻
至於點樣能夠增強自己的 pseudocode / programming 思維能力?最簡單莫過於實作打 code,近年尤以 Python 最似 pseudocode,也是來年中四 ICT 課程新加入的 programming language。打 code 最大好處就喺真喺要打過,先會知究竟打 code 所謂何事,而且打完 code 仲有得 compile / execute / run,出到 output 核對答案。只是 Python 同 pseudocode 始終仲有少少距離,例如標點符號等。
右手邊的 Python program,來自 DSE 2019 MC 31 ,佢地喺唔喺好似呢?基本上是 90%+ 相似,以下列出部份不同地方:
4.7 Boundary condition 踩線條件
公開試嘅 coding 題目,極為著重考生是否有留意 boundary condition,包括 if ... then,while / repeat loop 入面的條件。例如:
if mark > 50
then output "pass"
else output "fail"
那麼當 mark 喺 50 時,output 會出乜嘢?答案喺 "fail",因為 if statement 中嘅 Boolean expression 50 > 50 的結果喺 FALSE,因為任何一個數喺唔能夠大過自己。
除非 Boolean expression 喺 mark >= 50 咁就唔同,50 >= 50 喺 TRUE,因為包括等如自己嘅情況,所以 output 就會喺 "pass".
4.8 究竟 1 K = 1000, 還是等如 1024?
基本上 1 K = 1000,即 103,這是 SI Unit。所以 1 M = 1 000 000 (106)。 例如表示網速,5 Mbps = 5 x 106 bit per second
但凡事總有例外,討論儲存單位時,因科技界還未有共識,K 有兩個不同定義:10 進制 vs 2 進制。
10 進制: 1 KB = 1000 Bytes (較新定義)
2 進制: 1 KB = 1024 Bytes (已經用左幾十年)
為何是 1024?因為 1024 =210 ,而成部電腦,由 CPU 處理資訊,到 RAM 嘅架構,都喺以 2 進制做基礎。
硬碟廠商近年開始用 10 進制嘅 K, M, G, T,但並不是每個 Operating System 都跟住用,例如 Windows 仍然喺用 2 進制的 K, M, G, T,所以買番嚟嘅 SSD,經 Windows format 後容量表面上細咗,因為1024 比 1000 大 2.4%,打個比喻即喺用個大小小嘅樽,裝同樣數量的 bytes,咁個樽就好似裝唔滿,講到尾其實喺大家用嘅單位定義唔同啫 🤷🏻♂️
無論如何,公開試嘅儲存容量,仍然喺使用 2 進制的 K, M, G, T。大家答題也應該用番舊定義,除非題目喺講明用 10 進制。即喺:
1 KB = 1024 = 210 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
所以總結一句,喺 10 進制定喺 2 進制嘅 K, M, G, T? It depends on context. 科技日新月異,就連單位也不例外。
Apple 自 iOS 10 之後,已轉用 10 進制嘅 K, M, G, T,唔知幾時到 Windows 同 HKEAA 呢?
參考資料:https://support.apple.com/en-us/HT201402
☝🏻 宜家 SSD 上嘅 1 TB,定義喺 1000 x 1000 x 1000 x 1000 = 1012 Bytes
ISO 及 IEC 曾經提倡分清楚兩個單位,10 進制 KB 用番 Kilobyte,2 進制 KB 就用一個好難記的新名 Kibibyte 😵💫 結果就喺冇人用冇人講。道理好簡單,除咗缺乏宣傳外,更重要喺個名改得唔好,難記自然唔受歡迎。一樣嘢要 facilitate 好多人改變習慣,必須設計成易用易學,呢個喺千古不變道理。就好似我哋用 domain name 取代打 IP address 開網頁一樣,domain name 嘅發明,就喺要解決 IP address 難記難用的問題。
☝🏻 將 1 K 粒積木 (10 進制),排成正方形,點都爭 24 粒先至夠 1 K (2 進制),呢個就喺買番嚟嘅 SSD format 後好似容量細咗嘅原因 😕
4.9 Network devices 網絡設備
電腦網絡同埋設計喺足以開一個選修科嘅課題,而考生喺呢個 topic 的表現一直馬馬地 😢 個人覺得應要對各種 network devices 有基礎認識:hub, switch, router, access point, modem 等,而 YouTube 上亦有海量影片講解每個 device 的功能。
Hub 集線器
因為太慢 🐢 所以喺一個已經冇人用嘅 device。故名思義,集線器只喺將幾部電腦接駁成一個網絡嘅設備,冇 filter 功能,又冇任何智慧知道 packets 喺何去何從。接駁電腦數目一多,packets collisions 就會多到七彩,原因喺 hub 某一個 port 接收到一個 packet 後,就會「無差別」broadcast 到其他 ports,除咗製造不必要嘅 trafffic 外,基本上喺一個網絡安全隱患。
Switch 交換機 (聰明集線器)
外型上 switch 同 hub 喺好似,一般 switch 會有 8, 16, 24, 48 ports。Switch 喺一個智能 device,識得記住每一部電腦 LAN (Local Area Network) card 嘅 MAC address,packets 只會 send 比指定電腦,咁樣就唔洗好似 hub 咁,「無差別」broadcast packets 到其他 ports,網絡效能就可提高。
留意 switch 同 hub 都喺用喺同一個 LAN 入面,如果喺接駁兩個唔同嘅 network,就唔能夠用 switch,就要用下面嘅 router 路由器 👇🏻
Router 路由器 (connect 兩個網絡)
外型上 router 同 switch 又喺好似,但 router 識得認 packets 嘅 IP addresses (switch 就唔識),所以要接駁兩個唔同嘅 network,就要用 router,靠住 IP addresses,router 會識得將相應嘅 packets forward 去指定 network。
OSI model (用來比較唔同 devices 嘅高低)
喺 OSI model 嗰 7 個 layer 入面 😵💫,router 喺屬於 level 3 (三樓) 嘅 device,即喺識睇 IP address。Switch 喺屬於 level 2 (二樓),即喺低一層,只喺識睇 packets,MAC address 等。
按 OSI model,越低層,就越 hardware oriented,越高層,就越 software oriented。
Access Point (AP) 接入點 (無線接上有線嘅一點)
AP 喺學校、商場、同埋 office 常見,功能喺將 Wi-Fi devices 例如手機,iPad,接入到有線網絡,所謂接入點就喺咁解。
Wi-Fi Router 無線路由器 (AP + Router)
呢個就喺屋企常見嘅重要網絡設備,疫情下 Work From Home (WFH) 或在家上 Zoom 網課不能少。
Wi-Fi router 就喺 Access Point (AP) + Router,除咗將 Wi-Fi devices 接入到有線網絡 (LAN),仲可以接上 Internet (WAN),咁樣 Internet access 就可以喺 Wi-Fi devices 及 LAN 內共享。
☝🏻 Fiber optic modem 背後
Modem (數據機 / 調製解調器)
全名 Moderator-demodulator,將電腦用嘅 digital 數碼訊號,轉換成適合電話線傳送嘅 analog 類比訊號。至於接收那邊嘅 modem 就調轉,將 analog 類比訊號轉換成digital 數碼訊號,先至還原本來嘅訊息。
因近年網絡已發展到光纖到戶 (FTTH),所以又有 optical modem 嘅出現,將 Ethernet 網絡訊號轉換成光纖 (唔喺電話線) 入面嘅訊號。
睇咗咁多,想 check 吓自己識唔識,可以試下面嘅 Kahoot! Challenge: