二進位與像素圖案

課程總覽


資料來源

課程內容取材自「不插電的資訊科學」一書,請點擊連結下載全文!

單元一:二進位與像素圖案

什麼是二進位?

大多數的人類都擁有十個指頭,因此當需要計算數量時,就會自然而然的數著指頭來計算,但要如何計算超過 10 的數字呢?聰明的中國人想到了「位數」這個觀念,把兩個數字疊在一起來表示,如右圖。位數的觀念流傳到西方後,與印度-阿拉伯數字相結合,就成為現在所使用的十進位制。

所謂「十進位」,意思是每數到十就要增加一個位數,稱為「十位」,十個十則稱為「百位」......等等。

小朋友想想看,如果人類像「哆啦A夢」一樣只有手掌沒有手指,那要如何數數呢?

因為有兩隻手,所以最多只能數到 2,那就只能用「二進位」囉!

事實上在「二進位」被發明之前,我們已經在生活中廣泛地使用「二元狀態」來表達各種互相矛盾的觀念。例如:右邊照片上的開關直接使用「1」和「0」來表示「開」和「關」。

但是這種觀念與「二進位」並不完全相同,因為它們還沒有被運用於數學計算。

「二進位」到底與「電腦」有什麼關係呢?

因為電腦是使用「電位」來進行數學計算,可以想成是「通電」、「斷電」(其實也就是開關喔!),利用通電和斷電來控制電壓的變化就可以計算數學了。

給老師的說明

在電晶體(半導體)取代真空管之後,已經不再使用「通路」、「斷路」這樣的二元狀態,改用「高電位」、「低電位」來替代。

二進位的發明(1703年)遠早於電腦(1950年),曾經有一度被認爲是無用的數學。電腦之所以採用「二進位」不採用「十進位」,是因為早期電腦所使用的真空管只能表現「二元狀態」,無法表示「多元狀態」。也因為電腦的發明和採用,二進位才成為顯學。

除了數學計算以外,使用更為廣泛的「邏輯運算單元」(CPU 中的邏輯電路)的設計也是基於「二元狀態」。這也是電腦繼續採用二進位的最主要原因。

你會跟電腦一樣,只使用「0」 和「1」來數數嗎?

請把二進位撲克牌擺放在桌面上,從右邊數過來,第一張放點數最少的 1,第二張是點數第二少的 2 ......第五張則是 16,像下面這樣:

關於排列順序

十進位最右邊是個位,往左邊是十位、百位,這種排列方式稱為「高位優先」(big-endian),這是我們最習慣的方式。

在電腦上為了提高計算效率,會採取「低位優先」(little-endian)的方式排列。這兩種排列方式只是表示法不同,本質上沒有差異。

除了表示法的差異,計算順序也有兩種,中國的珠算是從左算到右,而現代數學則習慣從右算到左。儘管如此,計算結果並不會有不同。

請把所有的撲克牌翻到背面。把右邊第一張和第三張翻開,數數看總共是多少點?

翻開的牌是 1,沒翻開的牌是 0,五張牌的牌面是 00101,所以 00101 = 5

請隨意翻開或蓋上幾張牌,然後把牌面和點數記錄起來,牌面代表二進位數字,點數代表十進位數字。

沒有二進位撲克牌嗎? 請利用底下的網頁版撲克牌。

請試著按照順序用撲克牌表示 1、2、3、4、5......,並從其中找到規律性,讓數字一直加 1。

有什麼規律性?

從右邊往左邊找到蓋著的牌,將它翻開,如果右邊還有牌,將他們全部蓋上。

例如:3,右邊已經有兩張牌翻開,加 1 時必須翻開第三張牌,然後把右邊兩張牌蓋起來。

又例如:5,右邊三張牌中,第二張是蓋著的,第一張是翻開的,所以加 1 時把第二張牌翻開,然後蓋住第一張牌。

如何表示 0 ?

把所有的牌蓋起來就是 0,00000 = 0

5 張牌最多可以表示多大的數字?

根據實際測試結果為 31。 11111 = 31,用點數來看是 16+8+4+2+1 = 31。

5 張牌總共可以表示幾個數字呢?

31 再加上 0 這個數字,總共 32 個數字。

延伸活動:

第二節課

猜數字魔術

老師把預先製作的魔術卡片張貼在黑板上,排列如下圖:

請學生在心中想一個數字,必須是牌面有出現的數字,然後由老師隨機點一位同學,請他上台把出現該數字的牌一一指出來,然後面向老師直視老師的雙眼,讓老師施展讀心術,讀出同學心中的數字。接著老師就可以大聲說出感應到的數字。

誰想玩這個遊戲呢?請同學上台來挑戰老師的讀心術,比賽看看是同學的眼睛比較會保守秘密,還是老師的讀心術比較厲害!

回想一下上節課的內容,老師為什麼總是能猜中呢?

假設同學心中想的是 24,這個數字出現在左邊的第一張和第二張卡片,如果用 0 表示沒出現, 1 表示有出現,那就是 11000。

請同學把上節課的二進位撲克牌拿出來,排列成 11000,然後把所有點數相加,得到 24。也就是說 11000 = 24

現在仔細觀察魔術卡片的左上角,這個數字是不是與二進位卡片上的點數相同呢?

所以變魔術時,把被指出的卡片左上角數字加起來,16+8 = 24,就得到同學心中的數字了!

利用底下的網頁玩玩看,試著找出讀心術的秘密!

這個魔術的秘密就是二進位。要製作魔術卡片,首先必須先製作「二進位與十進位對照表」,請老師點擊下方的文件建立副本,列印給全班同學,一人一張,副本文件可以線上編輯讓學生可以核對答案。還記得上一節課學會的翻牌技巧嗎?運用這個技巧把對照表完成。

完成對照表後,請將二進位最右邊的格子是 1 的數字挑出來,寫在空白魔術卡片上(如右上文件,請老師事先下載列印好),寫在哪個格子都可以!注意:不要漏掉數字或是重複同一個數字。請檢查卡片上的數字,是不是剛好都是奇數呢?如果不是的話,就是做錯了喔!

第一張魔術卡片完成後,接著挑出二進位右邊數來第二格是 1 的數字,寫在第二張空白魔術卡片上。注意:不要漏掉數字或是重複同一個數字。請比對卡片上的數字,是不是跟對照表上面的一樣呢?如果不是的話,就是做錯了喔!

依序完成剩下的魔術卡片之後,下課時就可以跟同學一起玩喔!

如何讓這個魔術看起來更厲害:

第三節課

像素圖案

小朋友,你們有看過電腦動畫嗎?你知道電腦是如何顯示圖像的嗎?

舉例來說,要顯示小寫 a,可以在方格紙上把格子塗黑,先把圖案設計出來,如右圖。這樣的圖案稱為「像素圖案」。

要讓電腦產生一樣的圖案,必須寫程式。首先必須告訴電腦,一行有幾格,然後把程式指令轉換成底下的符號來表示:

用這個方法,我們可以把小寫 a,寫成下面的程式:

5→x→x→x→→→→→→x→→x→x→x→x→x→→→→x→x→→→→x→→x→x→x→x

請試著按照上面的指令,把圖案畫在老師發下的方格紙上面,跟隔壁同學比對看看一樣不一樣。

請畫出以下三個像素圖案:(將題目貼在下面網頁的向量表示法中,檢查答案對不對!)

像素圖案繪製完成後,如果要儲存成電腦檔案,有兩種格式可以選擇:


右圖是把小寫 a 圖案,轉換成二進位數字,空格是 0,塗黑的格子是 1。

右邊的像素圖案,是動物園裡最受歡迎的兩隻動物,你能將他們轉換成二進位數字,以便儲存到電腦裡面永久保存嗎?

使用上面介紹的方法儲存電腦圖像,還有一個小問題,就是隨著圖像越來越大,儲存空間就會不夠。如果能有一個方法可以把大的圖案縮小後再儲存,然後讀出來的時候,再由電腦自動放大回原來的樣子,這樣就更完美了。這種方法稱為「壓縮」,就像媽媽把冬天棉被收起來時,會先摺疊壓平再裝到袋子裡一樣!

最簡單的壓縮方法是將相同的資料改用次數表示,稱為「變動長度壓縮法」(run length encoding)

以小寫 a 做例子,第一行由左到右分別是 1 個白,3 個黑,1 個白,寫成「1,3,1」,第二行開始是 4 個白,1 個黑,寫成「4,1」,第三行開始是 1 個白和 4 個黑寫成「1,4」,第四行一開始不是白色,而是黑色,這樣就會跟前面幾行的規則不同,我們希望每一行都是從白開始,因此先加一個 0,表示沒有白色,改由黑色開始,然後是 1 個黑,3 個白,1個黑,寫成「0,1,3,1」,第五行與第四行相同是「0,1,3,1」,最後一行開始是 1 個白,4 個黑,寫成「1,4」。

我們希望一個圖案儲存成一個檔案,而不是一行一行存在不同的檔案裡。所以剛剛的資料要儲存到電腦裡時,會連接在一起變成:1,3,1,4,1,1,4,0,1,3,1,0,1,3,1,1,4

但是變成這樣的話,電腦不知道要還原成 5x6 的圖案。所以還要在資料的最前面加上 5,6,把圖案的大小也記錄起來,完整的資料像這樣:5,6,1,3,1,4,1,1,4,0,1,3,1,0,1,3,1,1,4

延伸活動:

第四節課

同位元檢測

老師把 25 張雙色軟磁鐵貼在黑板上,排列成 5x5 陣列。

請一位同學上台來把任意幾張圖案翻面變成隨機圖案。老師覺得還是不夠亂,於是又補上一行一列變成 6x6 陣列。

接下來是記憶力大考驗,等一下老師閉上雙眼時,請小朋友把其中一張牌翻面,不要讓老師知道是哪一張!

老師根據記憶中的牌形進行比對,找出被偷偷改變的牌。把這張被找出來的牌翻回原來的那一面,再請下一位同學來挑戰!

為什麼老師總是能夠發現哪一張牌被改變呢?

事實上,老師並不是憑著記憶力找到的,而是利用稱為「同位元檢測」的技巧發現的!

我們都知道警察會透過指紋抓犯人,為什麼大家不擔心警察會抓錯人呢?那是因為每個人的指紋都是獨一無二的,沒有人會相同,因此指紋被稱為「個人的生理特徵」。那麼如果資料有「指紋」是不是就能防止任何資料被亂改呢?

很可惜資料是沒有指紋的,不過我們可以用一些方法來觀察特徵,這樣也能起到類似指紋的功能!

先從簡單的例子來說明,如果有一行二進位資料長得像這樣:01001,我們利用奇偶數來找特徵,0 是偶數而 1 是奇數,剛剛的資料有兩個 1,所以是偶數。如果資料被改變成:01101,總共有 3 個 1,所以是奇數,原來的資料是偶數,現在變成奇數,這就證明資料有錯誤!

這個簡單的例子有兩個問題:

要解決這些問題就需要更複雜的「抓取特徵」的方法,如果資料超過一行的話,就可以利用不同方向的「同位元檢測」來尋找出錯的位置。

回到我們的魔術表演,黑板上的卡片,白色當成 0,0 是偶數,因此不管有幾個 0 都是偶數,所以白色可以忽略不去檢查。黑色是 1,1 是奇數,會隨著數量變化,例如:2 個就變偶數,3 個就又是奇數,我們必須特別留意黑色的個數。

當同學排完 5x5 的卡片時,老師開始檢查每一行的黑色數量,如果是奇數,就在最右側補上黑色卡片,讓它變成偶數。如果是偶數的話,就補上白色,維持偶數。接下來在每一列的下方也做一樣的檢查和補充。這樣就可以確定整個 6x6 的範圍內,無論是哪一行哪一列都會是偶數。

當同學改動其中一張卡片時,就會有一行變成奇數,也會有一列變成奇數,行列交叉的位置就是被改變的卡片。

如果一次改動兩張卡片,也能夠發現嗎?

如果被改動的卡片剛好不同行也不同列,那麼可以找到 4 張可疑的牌,因為不同行也不同列的兩張牌才會是答案,共有兩種可能,有 1/2 的機會找出正確答案。

如果被改動的卡片同行,只能找出被改動的兩列,如果是同列,則只能找出被改動的兩行。如果是 6x6 的表格,那麼只有 1/6 的機會猜到答案。

如果不是排成正方形,也能用這個方法找到被改變的卡片嗎?

是的,任何形狀只要行數和列數都超過 2 以上都可以使用這個方法。

延伸活動: