深入計算機系統 練習題2 44 補碼運算

2022-05-24 02:00:07 字數 524 閱讀 5193

int x = foo(); //任意值

int y = bar(); //任意值

unsigned ux =x;

unsigned uy = y;

證明對於所有的x和y值,它都為真(等於1);

或者2)給出使得它為假(等於0)的x和y的值。

1)x+y == uy+ux

答:這個等式成立,首先這個比較是在位級運算層面的比較。補碼和無符號加法有相同的位級行為,也就是從位級層面來看,它們是完全相同的。

2)x*~y + uy*ux == -x

很顯然,這也是位級層面的比較。既然已知x+y == uy+ux,不妨把整個等式統一成補碼的角度來看。即x*~y + y*x == -x;然後~y=-y-1,這樣等式就成立了。

舉個例子 y=5, 假設w=4,即位長為4位,則y的二進位制補碼表示為0101;

-y=-5,其補碼表示為1011;

-y-1,其補碼表示為1010;

~y 是按位取反運算 表示為 1010;

可以發現~y=-y-1;

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

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

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