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

2021-08-28 05:00:47 字數 711 閱讀 7178

錯誤示例

#include 

#include "stdafx.h"

#include

using

namespace

std;

int tadd_ok(int x, int y)

int tsub_ok(int x, int y)

int main()

列印結果

此問題的原因在於當y = int_min時,y = -y,為什麼y = -y因為-2147483648求反理論上應該是2147483648,從而使-y + y =0,但是由於有符號數的最大值是2147483647,所以出現溢位,有定義可知,當y = int_min時,-y=int_min,從而造成**異常

修改為

#include 

#include "stdafx.h"

#include

using

namespace

std;

int tadd_ok(int x, int y)

else

}int tsub_ok(int x, int y)

int main()

《深入理解計算機系統》 練習題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 36答案

注意z1變數,是先進行型別轉換,然後再執行乘法,再會隱式地將y進行型別轉換,再繼續執行乘法。z2,z3變數都是一回事。注意z4變數,x y 這裡還是int型的,所以這裡正溢位,進行截斷,還是 2147483648。然後進行型別轉換,即進行位拓展,新拓展的位上的值都為1。此函式為初始版本,是用除法來檢...

深入理解計算機系統 練習題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...