程式設計正規化測驗一

2021-10-23 06:53:56 字數 2468 閱讀 8124

我們軟體工程卓越班這學期的 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 天生可以支援多種程式設計正規化。從程式設計根本思維上的差異上區分,目前主要分成兩種 命令式 指令式 程式設計 和宣告式程式設計 命令式程式...