面試題目 《CC150》位操作

2021-09-09 04:27:53 字數 3745 閱讀 3796

面試題5.1:給定兩個32位的整數n與m,以及表示位元位置的i與j。編寫乙個方法,將m插入n,使得m從n的第j位開始,到第i位結束。假定從j位到i位足以容納m,也即若m=10011,那麼j與i之間至少可容納5個位。例如,不可能出現j=3和i=2的情況,因為第3位和第2位之間放不下m。

輸入:n=10000000000,m=10011,i=2,j=6,最後是第0位

輸出:n=10001001100

package cc150.bit;

public class updatebits

public int updatebits(int n,int m,int i,int j)

}

面試題5.2: 給定乙個介於0和1之間的實數(如0.72),型別為double,列印它的二進位制表示。如果該數字無法精確地用32位以內的二進位制表示,則列印「error」。

package cc150.bit;

public class bindecimal

public string printbin(double num) else

} return "0."+bf.tostring();}}

面試題5.3:給定乙個正整數,找出與其二進位制表示中1的個數相同、且大小最接近的那兩個數(乙個略大,乙個略小)。

package cc150.bit;

public class closenumber

public int getclosenumber(int x)

else if(a != -1 && b == -1)

else if(a == -1 && b != -1)

return result;

}public int getnext(int n)

while((c & 1) == 1)

if(c0 + c1 == 31 || c0 + c1 == 0)

return -1;

int p = c0+c1; //計算非尾部的最右邊的0的位置

n |= (1 << p); //把非尾部的最右邊的0翻轉成1,計算大於的那個值

n &= ~((1 << p) - 1); //將p右邊的所有位清0

n |= (1 << (c1-1)) - 1; //在右邊插入(c1-1)個1

return n; }

public int getpre(int n)

system.out.println("c1="+integer.tobinarystring(c1));

if(temp == 0)

return -1;

while(((temp & 1) == 0) && (temp != 0))

system.out.println("c0="+integer.tobinarystring(c0));

int p = c0+c1; //計算最右邊1的位置

n &= ((~0) << (p+1)); //將p右邊的所有位清0(包括p),p是非尾部的最右邊的1

system.out.println("清零後:"+integer.tobinarystring(n));

int mask = (1 << (c1 + 1)) - 1; //c1+1個1,清零之後,需要補充c1+1個1

system.out.println("補充1的個數:"+integer.tobinarystring(mask));

n |= (mask << (c0 - 1)); //需要補充的1多大能是多少,然後和清零後的合併

system.out.println("需要補充的1多大能是多少:"+integer.tobinarystring(mask << (c0 - 1)));

return (n);

}}

面試題5.4:解釋**  ((n&(n-1)) == 0) 的具體含義。

面試題5.5:編寫乙個函式,確定需要改變幾個位,才能將整數a轉成整數b。

package cc150.bit;

public class transform

public int calccost(int a, int b)

}

面試題5.6:編寫程式,交換某個整數的奇數字和偶數字,使用指令越少越好(也就是說,位0與位1交換,位2與位3交換,依次類推)。

package cc150.bit;

public class exchange

public int exchangeoddeven(int x)

}

面試題5.7:陣列a包含0到n的所有整數,但其中缺了乙個。在這個問題中,只用一次操作無法取得陣列a裡某個整數的完整內容。此外,陣列a的元素皆以二進位制表示,唯一可用的訪問操作是「從a[i]取出第j位資料」,該操作的時間複雜度為常數。請編寫**找出那個缺失的整數。你有辦法在o(n)時間內完成嗎?

package cc150.bit;

public class finder ,,,,}; //少了1,1

finder fd = new finder();

system.out.println(fd.findmissing(a,5)); }

public int findmissing(int numbers, int n)

return n;}}

面試題5.8:有個單色螢幕儲存在乙個一維位元組陣列中,使得8個連續畫素可以存放在乙個位元組裡。螢幕寬度為w,且w可被8整除(即乙個位元組不會分布在兩行上),螢幕高度可由陣列長度及螢幕寬度推算出。請實現乙個函式drawhorizontalline(byte screen,int width,int x1,int x2,int y),繪製從點(x1,y)到點(x2,y)的水平線。

package cc150.bit;

public class render ;

render rd = new render();

for(int i=0;i

system.out.println(rd.renderpixel(a, 0, 47)[i]); }

public int renderpixel(int screen, int x, int y)

return screen;}}

C C 筆試 面試題目總結,

基本都沒寫答案,查詢答案的過程就是學習的過程,會的也會引起一些思考。1.extern extern c 的作用,如何判斷一段程式是由c 編譯還是由c 編譯程式編譯的?2.程序和執行緒的區別和聯絡 3.inline 的作用 4.kmp演算法 5.函式呼叫方式 cdecl 堆疊由呼叫者清除 引數從右至左...

C C 筆試 面試題目大彙總 二)

16.關聯 聚合 aggregation 以及組合 composition 的區別?涉及到uml中的一些概念 關聯是表示兩個類的一般性聯絡,比如 學生 和 老師 就是一種關聯關係 聚合表示has a的關係,是一種相對鬆散的關係,聚合類不需要對被聚合類負責,如下圖所示,用空的菱形表示聚合關係 500 ...

C 面試題目

1 ispostback正確的是 首次載入頁面的ispostback的值為false 重新整理頁面後的ispostback的值為true 第三個選項忘了 2 頁面傳值的幾種方式 request.querystring session server.transfer 3 什麼是瀏覽器的 無狀態 如何解...