Chinaunix

标题: 在不同位数的机器上,int长度不变,long长度变化 [打印本页]

作者: maxxfire    时间: 2008-04-15 09:28
标题: 在不同位数的机器上,int长度不变,long长度变化
这两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8

不是说int会变吗,为何变得是long?
还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?
谢谢指教。。
作者: system888net    时间: 2008-04-15 09:35
原帖由 maxxfire 于 2008-4-15 09:28 发表
这两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8

不是说int会变吗,为何变得是long?
还有如果要写个通用的程序,订 ...

在16bit系统中sizeof(int)=2;
在有的64bit系统中的确有sizeof(int)=8的情况,跟机器字长和编译器都有关.
作者: system888net    时间: 2008-04-15 09:40
"如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?"

用long long 吧,相对好一些,但其它代码不需要重新编译是比较困难的!
作者: maxxfire    时间: 2008-04-15 09:50
原帖由 system888net 于 2008-4-15 09:35 发表

在16bit系统中sizeof(int)=2;
在有的64bit系统中的确有sizeof(int)=8的情况,跟机器字长和编译器都有关.



哦,学习了。。
作者: cugb_cat    时间: 2008-04-15 09:54
原帖由 maxxfire 于 2008-4-15 09:28 发表
这两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8

不是说int会变吗,为何变得是long?
还有如果要写个通用的程序,订 ...

使用int32_t,int64_t,int16_t等类型,在头文件<stdint.h>中定义的。
作者: zhuhefang2006    时间: 2008-04-15 10:12
两台机器,前者32位,后者64位,测试了以下数据类型的长度:

前者:
int:4,long:4,long long:8
后者:
int:4,long:8,long long:8
不是说int会变吗,为何变得是long?


The common programming model for existing 32-bit Unix stystems is caled the ILP32 model,denoting that integers, long integers and pointers occupy 32 bits. The model that is becoming most prevalent for 64-bit Unix systems is called LP64 model, meaming only long integers and pointers require 64 bits.


至于还有如果要写个通用的程序,订死必须用4个或8个字节的数据类型,在不需要重新编码编译的前提下,该如何处理这种变化?
赞同楼上的观点
不过楼主要求不重新编译是不行的吧

[ 本帖最后由 zhuhefang2006 于 2008-4-15 10:15 编辑 ]
作者: zhangxudong    时间: 2008-04-15 14:37
使用#include <stdint.h>
8位:int8_t, uint8_t





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2