2011-10-10 151 views
1

可能重複:
Determine word size of my processor如何在C中計算您的計算機的字大小?

這是一個今天的面試問題。但我不知道......


我覺得面試官meaned CPU的字大小。


我覺得像這樣的答案:

int cpu_bits(void *dummy1, void *dummy2) 
{ 
long offset = (long)&dummy2 - (long)&dummy1; 
int ret = 0; 
if (8 == offset) 
    ret = 64; 
else if (4 == offset) 
    ret = 32; 
else if (2 == offset) 
    ret = 16; 
else if (1 == offset) 
    ret = 8; 
else 
    ret = -1; 
return ret; 
} 

int main() 
{ 
printf("%d\n", cpu_bits(NULL, NULL)); 
return 0; 
} 

結果似乎是正確的,你這麼認爲嗎?

+6

我會開始通過詢問面試官的**確切定義**字的大小,他們想到了...... – NPE

+0

@PaulR如果字大小,如果8位呢?在C中,int總是至少16位。 – Juho

+0

@Juho:是的,現在我已經撤回了我的回答和評論,我已經有時間考慮了...... ;-) –

回答

3

簡短的回答:標準沒有定義是保證對應於底層架構的字大小的數據類型,什麼「字長「在現代CPU上的意思是相當模糊的東西:Word Size versus Address Size。對於具有兼容模式的當前處理器,不同大小的寄存器,適用於各種寬度的數據的高級尋址模式和指令,談論一般的「字大小」是不準確的,至少可以說是不精確的。

我想面試官仍然生活在90年代,並記得當大多數計算機仍然是16位時,WinAPI引入的可疑名爲WORDDWORD的類型。

0

我覺得他們期待這樣的事情:

printf("%d\n", (int)sizeof(int) * CHAR_BIT); 
+2

如果字大小爲8位,則sizeof(int)不起作用。另外,在大多數64位編譯器中,int是32位,而字是64位。 – Juho

+0

@PaulR:我們在帖子和編輯中遇到了競爭狀況。 :) –

+0

@Jhoho:你是什麼意思,它不起作用?順便說一句,int每個C標準的長度必須至少爲16位。找出底層,硬件,字的大小可能是你在C中無法可靠地做的事情。 –