面試題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 什麼是瀏覽器的 無狀態 如何解...