李林能清晰地聽到考場內,一陣陣倒吸涼氣的聲音。
雖然有點吵,但也能夠理解。
不得不說,這套題的難度確實也超乎他的預料了。
畢竟他也是做過前些年真題的,其中變化還是能感覺出來的。
不過嘛……
李林捏了捏下巴。
「在32位計算機上,執行下列C語言代碼:short si =-32767; unsigned int ui = si;,則ui的真值為:」
說實話,他看到這道題時,沒繃住。
這居然是第一題嗎?
未免……
太簡單了。
當然,這裡的「簡單」,是以他C語言達到了貫通水平來說的。
很顯然,對於其他學生來說,這道題處處是雷。
也有可能,大部分人連題目在考察什麼都看不懂。
李林搖搖頭,不再想其他的,埋頭做起題來。
————
羅冠作為跟著卷子一塊從省城運到考場的監考老師,青年教師中最出類拔萃的那批。
當然也不可能提前看試卷。
頂多是……知道億點點內幕。
但即便是他這種見過大場面的,在真正看到試卷的時候,也不禁倒吸一口涼氣。
沒錯,考場裡就屬他吸得最大聲。
無他。
只是因為他比其他人更明白,這份卷子擺在這,到底意味著什麼。
風向不是變了那麼簡單,而是徹徹底底的翻轉。
「說是一定程度上提高難度,但這未免也……」
他一邊翻看試卷,一邊搖頭,
「這考查的未免也太深了,第一道題最好的處理方式竟然是跳過。」
他太了解參加信奧學生的學習路線了。
絕大多數競賽生的知識結構是倒金字塔形的。
也就是算法能力突出,語言基礎和計算機原理薄弱。
即便是到了省賽階段,也很少有學生會去鑽研程式語言的底層特性,更別提更複雜的計算機底層特性了。
大多數人做這道題,第一反應是用自己熟悉的邏輯去推導,然後掉進坑裡。
出題組顯然是故意的。
下馬威嘛……
還是說,第一道題,就已經開始篩選了。
「說是今年要篩選出一批真正適合學計算機的學生來,但是,這麼大的步子,真的不會扯著蛋嗎?」
想到最近導師和自己閒聊間,提到過的傳言……
羅冠突然有些不寒而慄。
他掃了一眼台下,考生們無一例外地皺著眉頭。
有人反覆翻頁,似乎在搜尋著一道自己會做的題目,翻來翻去,試卷依舊空白,但表情卻逐漸被絕望填滿。
有人庫里咔嚓地寫了一整頁,最後在上面打了個大大的叉。
還有人直接跳過那些不會的,好策略!
但是……一道、兩道——喂,怎麼又跳到開頭了。
羅冠不僅扶額嘆息。
不過,很快他便察覺了異樣。
這種大環境下,一個學生和其他人狀態差別太大,是一眼就能看出來的。
不急不慢,有條不紊。
羅冠眯起眼睛,和副監考對視一眼,然後踱步往下走。
走到那個學生旁邊的時候,他微微側頭,目光落在答題卡上。
只見那學生竟然已經翻過了一面。
也是在找自己會做的做嗎?
羅冠心想。
然而眯起眼睛一看,才發現前面所有題目都寫上了答案。
不僅如此,每道題旁邊還有幾筆勾畫,簡單寫出了思路。
第一題旁邊只寫了兩串字符:
1000 0000 0000 0001、1111 1111 1111 1111 1000 0000 0000 0001
放在其他人眼裡,這可能是意義不明。
但羅冠打眼一看,差點一拍大腿。
這個學生,他懂!
沒錯。
這道題表面上考的是C語言的類型轉換,實際上埋了三層陷阱。
第一層,short是16位有符號數,-32767的二進位表示是1000 0000 0000 0001。
第二層,將short賦值給unsigned int時會發生隱式類型轉換,有符號數擴展為32位後再解釋為無符號數,而C語言的標準規定有符號數擴展時按符號位填充高位,所以-32767擴展為32位後變成1111 1111 1111 1111 1000 0000 0000 0001。
第三層,這個二進位串解釋為無符號整數時,真值等於1+2^15+2^16+……+2^31=2^32-2^15+1。
每一步都是坑,踩錯一個就全錯。
但這學生既然能寫下的這兩串二進位,說明他完全明白,這道題根本考查的就是無符號數和有符號數的補碼表示。
羅冠在心裡默默演算了一下,和李林答題卡上的答案對上。
嗯,對了。
看來……這小子不僅是特性了解的深刻,數學應該也不錯。
否則,不可能在這麼短的時間內算對。
然而,李林其實完全沒用他略顯拉胯的數學。
他只不過是對二進位足夠敏感,加上補碼表示和無符號數轉換的機制他早就爛熟於心。
這不是算出來的,而是查表查出來的。
就在羅冠心裡默默驗算第一題的時候,李林已經又往後刷刷寫了幾道題。
翻頁。
羅冠看得目瞪口呆,這熟練度……
在察覺到自己一直站在這,引起了眼前學生的疑惑後,他又連忙扭頭繼續往前走。
走到講台前,繞回來。
再繞回來,又走過去。
看似在巡邏,實則每次經過李林身邊的時候都會放慢腳步,目光往他的答題卡上瞟。
眾所周知,題目一般是越往後越難的。
但李林的答題速度不僅絲毫沒有減緩,反而越寫越順手,像是找到了某種節奏。
羅冠越看越心驚。
這絕對不是高中生的水平了。
不說比教室,省一中接受了三年系統計算機教育的學生,在這種題目面前也未必能打得過他。
很快,李林就一路過關斬將,來到了最後一題。
連帶著羅冠都聚精會神起來。
「已知計算機M字長為32位,按字節編址,採用請求調頁策略的虛擬存儲管理方式,虛擬地址為32位,頁面大小為4KB;數據Cache採用4路組相聯映射,數據區大小為8KB,主存塊大小為32B。現有C語言程序段如下:for(i=0;i<24;i++) for(j=0;j<64;j++) a[i][j]=10;已知二維數組a按行優先存放,在虛擬地址空間中分配的起始地址為0042 2000H,sizeof(int)=4,假定在M上執行上述程序段之前數組a不在主存,且在該程序段執行過程中不會發生頁面置換。請回答下列問題:」
「……」
羅冠都不用往下看具體的問題,光看這個題干描述,他就知道。
已經超綱了。
這完全就是在考計算機組成原理。
虛擬內存管理、頁表機制、Cache映射策略、地址結構拆分……
這些內容根本就不該出現在初賽。
出題組這是基本是把大學本科作業系統和組成原理的內容壓縮了一下直接扔給高中生了。
在看到李林也放下筆,默默揉了揉太陽穴時。
羅冠也跟著點點頭,沒有絲毫意外。
畢竟,能做到這種程度已經非常了不起了。
前面那些題的質量已經足夠驚艷,壓軸題屬於超綱內容,做不出來也情有可原。
這個學生就算這一題空著,分數也絕對夠了。
甚至不是夠不夠的問題……
正當他思考的時候,眼皮子底下,李林突然打了個悠長的哈欠。
「?」
何意味?
羅冠還沒來得及消化這個哈欠的含義,就看到李林提起筆,在題幹上簡單畫了幾道斜槓。
把虛擬地址結構拆成頁目錄偏移、頁表偏移、頁內偏移三段。
幾道斜槓,像手術刀一樣精準地剖開了這道題的核心。
還沒等羅冠反應過來,他就開始寫了。
一問、兩問、三問……
幾乎沒有停頓。
筆尖流暢地划過答題紙,像是他心裡早就有了完整的答案,只是在花時間把它抄上去而已。
羅冠張大了嘴巴,死死盯著他,就這麼飛快地推進著每一小問。
他不再巡邏了,也不管別人看了怎麼想。
他就站在李林側後方不遠處,屏著呼吸看他做完了整道壓軸題。
我靠。
中間不知道哪一步沒跟上思路,現在已經看不懂了。
但不妨礙他在內心深處感嘆一句:
真是牛 b……
咳。
我的意思是,後生可畏。