練習2.1320世紀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...