我們軟體工程卓越班這學期的 10-17 周開設了《程式設計正規化》課程,這門課程是廖浩德老師引入的史丹福大學的《程式設計正規化》。該課程的英文版可在 51cto 學習。
該課程主要講授資料型別的記憶體布局、泛型及其實現、 彙編實現、編譯和鏈結、併發程式設計、函式式程式設計等。 就我個人而言,在這門課中收穫很大,使我對計算機的底層更加了解,對知識達到了知其然,知其所以然的地步。由於這門課沒有最終的期末考試,所以每週都會有測驗,作為期末成績的參考,本文主要記錄第一次測驗的題目以及解析。
1、-64.25 的二進位制位模式(ieee 754 標準,32位)是?
答案:1100 0010 1000 0000 1000 0000 0000 0000
2、 -2.75 的二進位制位模式(ieee 754 標準,32位)是?
答案:1100 0000 0011 0000 0000 0000 0000 0000
這兩道題比較簡單,屬於熱身題,主要考察浮點數的機器級表示,下圖是浮點數在記憶體中的儲存格式:
實數值 = s 1.x * 2^(e – 127)
3、int 型資料轉換為 short 型:對於 int 型位模式 0000 1000 0000 0010 0000 0100 0000 1100 複製到 short 型空間,表示的十進位制整數為?
答案:1036
這個題考察強制型別轉換時,會精度精度,因為 int 型別佔 4 個位元組,而 short 型別佔 2 個位元組,所以 short 只解析低 16 位 0000 0100 0000 1100,轉換成十進位制為 1036.
4、
float d =
3.1415926
;unsigned
char
*p =
(unsigned
char*)
&d;
d 的二進位制位模式為:0100 0000 0100 1001 0000 1111 1101 1010
在小端模式下,p + 2 處的位元組表示的是 ascii 字元?
答案:i
這道題我做錯了,其實很簡單,p 就是 d 低 8 位對應的位址,p + 2 就是 d 17-24 位對應的位址,對應的二進位制位模式為 0100 1001,十進位制為 73,對應的 ascii 為 i。
5、
int i =35;
float f =*(
float*)
&i;
變數 f 的二進位制位模式是?
答案:0000 0000 0000 0000 0000 0000 0010 0011
35 的二進位制位模式為 0000 0000 0000 0000 0000 0000 0010 0011,把它以浮點數的形式解析,再取出應該是乙個非常小的數,但是二進位制位模式不變,還是 0000 0000 0000 0000 0000 0000 0010 0011。
6、
struct mytype
;
乙個 mytype 型別的變數 m,各分量初值分別為:a 為 『a』,b 為 『b』,c 為 2,d 為 4。((mytype *)&m.c)->a
的值為(十進位制表示,小端模式)?
這段**的意思將 c 變數的位址作為乙個新結構體的起始位址,因為 a 對應的結構體的第乙個元素,它為 char 型別,佔乙個位元組,取出 a 的值的意思是取出結構體第乙個位元組上的值,因為新結構體的前兩個位元組為舊結構體的 c 對應的位址,而 c 的值為 2,在小端的機器中表示為 10 00 00 00 00 00 00 00,取第乙個位元組就是 10 00 00 00,對應的值就是 2。
答案:2
7、
int a[4]
;a[0]
=0;a[
1]=1
;a[2]
=2;a[
3]=3
;((short
*)a)[4
]=4;
((short*)
(((char*)
(&a[1]
))+2
))[2
]=2;
最後 a[2] 的位模式是(小端模式)?
答案:0000 0000 0000 0010 0000 0000 0000 0100
這道題比較有意思,也不難,仔細一點就能想出,((short *)a)[4] = 4;
表示將 a[2] 的前兩個位元組賦值為 4,((char *)(&a[1])) + 2)
表示讀取 a[1] 第乙個位元組,然後加二,也就是讀 a[1] 的第三個位元組,最後以 short 型別解析,第二個 short 陣列的元素賦值為 2,也就是 a[2] 的後兩個位元組,兩者共同操作後,a[2] 的位模式為 0000 0000 0000 0010 0000 0000 0000 0100。
程式設計正規化21
double all 123 4 246 8 incr all 123 4 234 5 define double x x2 define incr x 1 map double 1 2 3 4 24 68 eval這個過程的用法,利用它可以實現用scheme語言本身來解釋scheme表示式的功能,...
程式設計正規化總結
什麼是物件導向程式設計?object oriented programming oop 把物件作為基本單元,把物件抽象成類 class 包含成員和方法 資料封裝 繼承 多型 python中使用類來實現。過程式程式設計 函式 oop 類 類變數和例項變數的區別 區分類變數和例項變數 類變數由所有例項共...
程式設計正規化概述
程式設計正規化這個名詞聽起來好像比較高深,但是其實本質上是它是對於程式設計風格,或者設計思路的抽象。它並不是跟程式語言是一一繫結的關係,有些程式語言python 天生可以支援多種程式設計正規化。從程式設計根本思維上的差異上區分,目前主要分成兩種 命令式 指令式 程式設計 和宣告式程式設計 命令式程式...