64 位数据模型 c++、c

 

出处:http://blog.chinaunix.net/u3/110597/showart_2329904.html

转自http://hi.baidu.com/qinpc/blog/item/15c8ac64a10c10f5f736540a.html/cmtid/982c4c36a23153d0a3cc2bb5

int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。

C、C++标准中只规定了某种类型的最小字节数(防止溢出)

 

以下来自百度百科:“64位_”http://baike.baidu.com/view/125381.htm

64 位数据模型

以高阶语言编写的应用软件,从 32 位架构转换到 64 位架构的各种困难。一个共同的问题是,部分程序员假定指针如同其它数据型态一样有相同的长度。程序员假定他们可以在数据型态之间传送数量而不遗失信息。这些假定只在一部分 32 位机器上如此(甚至是一部分 16 位机器),不过在 64 位机器上就不再如此。C 语言及其后代 C++ 尤其容易产生这种错误。

C 和 C++ 并未定义指针、整数型(int)、长型(long)为特定的位数目。  
在主要的 32 位机器程序设计环境中,指针、“int”变量、“long”变量全部都是 32 位长。

在 64 位机器下的许多程序设计环境,“int”变量仍然是 32 位宽,不过“long”和指针是 64 位宽,上述内容称为 LP64 数据模型。另一个选择是 ILP64 数据模型,三种数据型态都是 64 位宽,甚至 SILP64 连“short”变量也是 64 位宽。然而,大多数情况下所需的修改是相对次要且简单,而且许多编写良好的程序可以简单的重新编译给新的环境,而无须修改。另一个选择是 LLP64 模型,其维持 32 位代码的兼容性,使 int 和 long 为 32 位。“LL”指“long long”型态,其在所有平台下至少是 64 位,包括 32 位环境。  
今天有许多 64 位编译器使用 LP64 模型(包括 Solaris、AIX、HP、Linux、Mac OS X、IBM z/OS 本地编译器)。微软的 VC++ 编译器使用 LLP64 模型。其缺点是在 LP64 模型中将 long 存放到 int 可能会溢出。另一方面,还会使强制转型一个指针为 long 可以作用;在 LLP 模型下,情况则刚好相反。两者皆不应该出现在合乎 C99 的代码中。

注意,程序设计模型是在预编译器底层选择的,且数个模型可共存于同一操作系统。然而一般由 OS API 选择程序设计模型作为原始模型。

 

64位指的是cpu通用寄存器的数据宽度是64位的。

 

数据类型名称字节数别名取值范围
int*signed,signed int操作系统决定,即与操作系统的"字长"有关
unsigned int*unsigned由操作系统决定,即与操作系统的"字长"有关
__int81char,signed char–128 到 127
__int162short,short int,signed short int–32,768 到 32,767
__int324signed,signed int–2,147,483,648 到 2,147,483,647
__int648–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool1false 或 true
char1signed char–128 到 127
unsigned char10 到 255
short2short int,signed short int–32,768 到 32,767
unsigned short2unsigned short int0 到 65,535
long4long int,signed long int–2,147,483,648 到 2,147,483,647
long long8none (but equivalent to __int64)–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long4unsigned long int0 到 4,294,967,295
enum*由操作系统决定,即与操作系统的"字长"有关
float43.4E +/- 38 (7 digits)
double81.7E +/- 308 (15 digits)
long double81.7E +/- 308 (15 digits)
wchar_t2__wchar_t0 到 65,535
类型标识符类型说明长度
(字节)
范围备注
char字符型1-128 ~ 127-27 ~ (27 -1)
unsigned char无符字符型10 ~ 2550 ~ (28 -1)
short int短整型2-32768 ~ 327672-15 ~ (215 - 1)
unsigned short int无符短整型20 ~ 655350 ~ (216 - 1)
int整型4-2147483648 ~ 2147483647-231 ~ (231 - 1)
unsigned int无符整型40 ~ 42949672950 ~ (232-1)
float实型(单精度)41.18*10-38 ~ 3.40*10387位有效位
double实型(双精度)82.23*10-308 ~ 1.79*1030815位有效位
long double实型(长双精度)103.37*10-4932 ~ 1.18*10493219位有效位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值