1.這是一道關於結構體對齊補齊的題;
在32為ibm-pc機上使用c語言,若有如下定義:
structaa;
則變數a所占用的位元組數和成員布局為 (c:char,s:short,i:int,x:填充位元組)。
a.9,cssssiiii
b.10,cxssssiiii
c.12,cxssssxxiiii
d.12,c***ssssiiii
分析:
c語言中結構所佔記憶體理論上來說是各成員的記憶體量之和,但還有他獨有的規則(對齊補齊);
所謂對齊,就是成員記憶體的起始位址必然是他自身所佔記憶體的整數倍;
補齊,則是指結構的記憶體總量是最大成員的整數倍,最大成員超過4位元組的按4位元組算.
根據上面的原則, 布局為cxssssxxiiii 總共12位元組, 所以c為正確答案.
2.關於位與運算
int x = 9999,y;
for(y = 0; x; y++)
x = x & (x - 1)
printf("%d\n", y);
輸出是?
分析:9999 二進位制 10011100001111
第一次&(x-1)將最右邊的1置零
第一次&(x-1)將右邊第二個1置零
依次類推
直到x變成0
所以x有幾個1就會有幾次位與運算
所以9999總共要進行8次位與運算。
3.關於型別提公升(integer promotion)
unsigned char a = 0xa5;
unsigned char b = ~a>>1+2+3;
printf("%d\n", b);
輸出結果是?
這道題的最終結果是253. 剛開始我百思不得其解,後來我在論壇上發了個類似的帖子求助,在高手的指導下
我終於明白了其中的道理;
分析:~a的結果被提公升為int (4位元組) 即:0xffffff5a
然後右移6位:即為:0xfffffffd
再轉為unsigned char 為:0xfd==>253.
那些年奇葩的面試題
結構和類的區別 1.儲存型別 結構是值型別,儲存在棧上。類是引用型別,儲存在棧上和堆上,堆上儲存真實資料,棧上儲存儲存位址,修改乙個引用的值,另乙個相同的引用的值就會發生改變。2.繼承性 類是可以繼承的,它可以繼承其他的類或者介面,也可以被繼承,並且,類的許多特性是通過繼承來展現的,要阻止類的繼承,...
那些年面試遇到的坑
在非同步模式下,當我們使用ajax傳送完請求後,可能還有 需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含ajax請求 的函式中的剩餘 將繼續執行。如果我們是將請求結果交由另外乙個js函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣...
遇到的android面試題
1 簡述android中實現多執行緒的幾種方法,及各自的優缺點 多執行緒實現方式implements runnable 或 extends thread 1 activity.runonuithread runnable 2 view.post runnable view.postdelay run...