2011-10-10 152 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中无法可靠地做的事情。 –