问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 怎么区分当前系统是32位还是64位?

发布网友 发布时间:2022-04-24 04:15

我来回答

4个回答

热心网友 时间:2023-09-04 19:46

32位和64位指的是操作系统的位数,映射到C语言中,最直观的就是指针类型占用的字节数。

1 32位系统:

地址占32位,所以指针类型同样占32位,即4字节。

2 64位系统:

地址占64位,所以指针类型同样占64位,即8字节。


于是,只需要判断任意一个指针的sizeof值,即可获取到位数。

int main()
{
    int bits= sizeof(char *);
    if(bits == 4) printf("32位\n");
    else if(bits == 8) printf("64位\n");
    else printf("others, bits = %d\n", bits);
}

热心网友 时间:2023-09-04 19:47

有一个简单的方法来确定所编译的程序的位数,判断指针变量的长度。

int *pi;
if(sizeof(pi)==4) printf("32 bits");
if(sizeof(pi)==8) printf("64 bits");追问我的程序是在32位系统下面编译的,然后拿到64位系统下执行。

#ifdef WIN32
sizeof 判断 都失败了

#define _B_WIN_32_ ((sizeof(int) == 4) ? TRUE : FALSE)

请问还有没有别的方法

追答你的意思是判断程序所运行的操作系统的位数吧,我想可以调用windows相关API判断。
我提供的只是判断本程序的位数。你的sizeof(int)也一样。
要分清是程序的位数 or 操作系统的位数。windows64位可以运行32位的程序。

热心网友 时间:2023-09-04 19:47

简单说,C语言本身是做不到这个工作的,只能人工判定,根据机器和编译器的位数定义宏
#ifdef WIN32

#else

#endif追问我开始也是这么做的,但是我的程序是32位下面编译的,拿到64位系统下运行,这个#ifdef WIN32一样成功,意思就是不能区分是64位 还是32位。

上面仁兄说的 sizeof我也试过 一样不行。

追答32位下编译出来的代码在64位上是不能用的,你加了宏定义也没用,因为宏定义是在编译时进行确定的,不是在运行时确定的。所以,只能重新在64位机上进行重新编译才有可能能运行(要看你的代码可移植度够不够高!)

热心网友 时间:2023-09-04 19:48

经过对include的翻查,最后确定gcc以__i386__来进行32位编码,而以__x86_64__来进行64位编码;64位的gentoo下stdio.h就是个简单例子(i不晓得其它的是不是?);而且在bits/wordsize.h中对这两个定义进行了综合,以__WORDSIZE的值来表示机器类型,大家可以直接去看看

例子

#include <stdio.h>

int main(int argc ,char* argv)

{

#ifdef __x86_64__

printf("__x86_64__");

#elif __i386__

printf("__i386__");

#endif

return 0;

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四万元没开发票税务局发多少钱 不给开发票这个情节要罚多少钱? 广东乌龙茶的种类 银行什么时候拉征信 600795国电电力,为什么在2010年4,5月突然从8块跌到4块呢?涨幅-50%... 学习很差怎么逆袭 高考文科差生五十天冲刺计划!!! ...漂亮女人,那些不大漂亮的还很善良有点丑的怎么办?她们不是很可怜吗... CS1.6 AWP经典的FRAG视频 求链接 ...大家谁有AWP的视频或者DEMO,要个看看,学学,谢谢!~ 计算机中32位与64位有什么区别? C语言,int变量为什么占4个字节?32位64位又是什么意思? 32位与64位有什么区别 64位与32位有什么区别 怎样选美股? 怎么买美股! 股市今天咋的跌了? 昨天大跌是因为美股大跌,今天美股又大跌了吗 怎样做美股? 中概互联赎回后 美股怎么算时间 温州米多装饰设计有限公司怎么样? 温州室名空间设计有限公司怎么样? 温州拾一空间设计有限公司怎么样? 温州和筑环境艺术设计有限公司怎么样? 温州铭鼎装饰设计有限公司怎么样? 温州星杰装饰设计有限公司怎么样? 温州市柳义室内装饰设计事务所怎么样? 温州本来装饰设计工程有限公司怎么样? 温州市逸坤装饰设计有限公司怎么样? 温州金品堂装饰设计有限公司怎么样? 请问64位与32位有什么区别? 什么是32位? 与64有什么区别? 32位系统与64位系统有什么区别?具体是什么?32?64?不懂 所谓操作系统32位和64位是什么意思,有什么区别 我自己没办过信用卡,为什么我会征信有信用卡逾期 32位和64位的意义和区别 64位和32位有什么区别 信用卡逾期对征信有什么影响? 32位和64位有什么区别 信用报告中出现多张信用卡逾期,但是我本人并没有这些信用卡怎么办? 信用卡逾期几天就上个人征信? 征信报告里有信用卡逾期记录一次怎么办 征信报告上写着信用卡账户数1 发生过逾期的账户数1 发生过90天逾期以上的1 其余全都是0。谢谢高手解答。 小雪吃什么食物啊? 小雪吃什么传统食物 小雪节气饮食习俗有哪些 太原小雪节气有什么讲究? 白酒市场变动,你觉得还有没有可能回调呢? 小雪北方吃什么传统食物? 小雪吃什么 小雪吃什么好 小雪食俗有哪些