《深入理解計算機系統》 練習題2 36答案

2021-08-31 07:25:14 字數 676 閱讀 4419

注意z1變數,是先進行型別轉換,然後再執行乘法,再會隱式地將y進行型別轉換,再繼續執行乘法。

z2,z3變數都是一回事。

注意z4變數,(x * y)這裡還是int型的,所以這裡正溢位,進行截斷,還是-2147483648。然後進行型別轉換,即進行位拓展,新拓展的位上的值都為1。

此函式為初始版本,是用除法來檢測的:

int

tmult_ok

(int32_t x,

int32_t y)

先提前擴大兩個數的範圍,再執行乘法。

然後再進行截斷,因為截斷之後就相當於把乘積mod 2

322^

232,取餘2

322^

232的範圍為【0,2

322^

232-1】。如果截斷以後,值不相等,那麼就出現溢位了。

int

tmult_ok2

(int32_t x,

int32_t y)

《深入理解計算機系統》 練習題2 32答案

編寫函式tsub ok的 引數是x和y,執行的運算是x y,如果計算x y不產生溢位,函式就返回1.假設你寫的 如下 int tsub ok int x,int y int tadd ok int x,int y 此函式能檢測到兩個數相加,若發生溢位,則返回0,否則返回1。如果y的值為int min...

深入理解計算機系統 練習題2 11 答案與分析

可執行 include include stdafx.h include using namespace std void inplace swap int x,int y void reverse array int a,int cnt int main int len sizeof a size...

深入理解計算機系統 練習題2 26 答案與分析

測試 include include stdafx.h include using namespace std int strlonger char s,char t int main a.這道題答案說的很清楚,由於strlen採用無符號數,因為無符號數減法肯定還是無符號數不存在負數,所以所有判斷都...