返回信息流如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~
我在网上搜了一段代码:
int main()
{
int* p = 0 ;
p++;
printf("%d",((char*)p-(char*)0 )*8);
return 0;
}
我在我电脑上试了,输出32,但我不是很明白...1)int* p = 0是设置p=NULL吧;2)感觉它是通过求int的大小来推算操作系统的位数,但sizeof(int)=4就一定代表操作系统是32位的么?二者没有必然的联系吧...
还烦请版上各位大牛们指点迷津啊:-)
这是一条镜像帖。来源:北邮人论坛 / cpp / #33122同步于 2009/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]不用sizeof,如何判断操作系统是32位的还是64位的
gang
2009/12/9镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 gang 的大作中提到: 】
: 如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~
: 我在网上搜了一段代码:
: int main()
: ...................
上面那段代码是通过指针类型的++跨度来判断是32位还是64位。
我自己想了一段代码,是通过栈的大小来判断 如果32位cpu则栈是32 如果64位cpu则栈也是64位
long _cdecl get_cpu_bits(void* arg1, void* arg2)
{
return ((long)&arg2 - (long)&arg1)*8;
}
【 在 gang 的大作中提到: 】
: 如题,一道面试题目“不用sizeof,如何判断操作系统是32位的还是64位的”还请高人指点啊~
: 我在网上搜了一段代码:
: int main()
: ...................
这个应该算是判断程序本身是32位还是64位吧,你输出32应该是你编译成了32位程序的缘故吧
【 在 jmpesp 的大作中提到: 】
: 上面那段代码是通过指针类型的++跨度来判断是32位还是64位。
: 我自己想了一段代码,是通过栈的大小来判断 如果32位cpu则栈是32 如果64位cpu则栈也是64位
: long _cdecl get_cpu_bits(void* arg1, void* arg2)
: ...................
我的疑惑很白痴,大牛别笑话我~
操作系统的位数和cpu的位数还是不太一样的吧(虽然我也没弄明白他们两到底啥区别),64位的cpu上可以跑32位的操作系统,这样的话该怎么去判断操作系统的位数呀?
【 在 gang 的大作中提到: 】
: 我的疑惑很白痴,大牛别笑话我~
: 操作系统的位数和cpu的位数还是不太一样的吧(虽然我也没弄明白他们两到底啥区别),64位的cpu上可以跑32位的操作系统,这样的话该怎么去判断操作系统的位数呀?
64位cpu是可以兼容32位模式的
当步入32位兼容模式的时候 这个64位cpu逻辑上就当作32位用