CSAPP 書本P39 練習2 13

2022-07-29 20:57:13 字數 1281 閱讀 6235

練習2.13

20世紀70年代末至80年代末,digitalequipment的vax計算機是一種非常流行的機型。它沒有布林運算and和or指令,僅僅有bis(位設定)和bic(位清除)這兩種指令。兩種指令的輸入都是乙個資料字x和乙個掩碼字m。

他們生成乙個結果z。z是有依據掩碼m的位來改動x的位得到的。使用bis指令。能夠在m為1的每乙個位置上,將z相應的位置設為1。

使用bic指令。能夠在m為1的每乙個位置上,將z相應的位置設為0。

為了弄清bis和bic運算與c語言位級運算的關係,如果我們有兩個函式bis和bic來實現位設定和位清除操作。僅僅想用這兩個函式,而不使用不論什麼其它c語言運算,來實現按位|和^運算,即或運算和異或運算。bis等價於or,bic(x,m)等價於x&~m。x^y=(x&~y)|(~x&y)

示比例如以下:

/*定義兩個運算函式*/

int bis(intx, int m);

intbic(int x, int m);

/*或運算的實現*/

intbool_or(int x, int y)

/*異或運算的實現*/int

bool_xor(int x, int y)

對bis的理解

e.g. bis([1001],[1101])=[1101];

將掩碼m中為一的位,不論x為0或為1,都將其置一;

相當於或運算

對bic的理解

e.g.([10011001],[11101000])=[00010001];

將掩碼m中為一的位,不論x為0或為1,都將其置零;

相當於先將掩碼取反 使其原來為1的位變為0 然後與x取並

bis(0,0)=0;bis(0,1)=1; bis(1,0)=1; bis(1,1)=1;

bic(0,0)=0; bic(0,1)=0; bic(1,0)=1; bic(1,1)=0;

異或運算

x^y=(x&~y)!(y&~x)

x^y=bis(bic(x,y),bic(y,x))

p39最大子陣列問題o lgn)

max.c created on feb 4,2016 author wing test.c created on 2016年1月21日 author wing include includeint smax int num,int l,int r,int maxi,int maxj int fin...

No 3 陣列中重複的數字 P39

題目1 找出陣列中重複的數字 題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 方法1 先排序,後比較...

python入門 P39類和物件 拾遺

組合就是把舊類例項化放到新類裡面進行呼叫,如下 class chairs def init self,x self.num x class glasses def init self,y self.num y class build def init self,x,y self.chairs cha...