int ,long ,long long

1.数据类型在各种机器中所占的字节数不同
16位平台
char         1个字节8位
short        2个字节16位
int            2个字节16位
long         4个字节32位
指针         2个字节
32位平台
char         1个字节8位
short        2个字节16位
int            4个字节32位
long         4个字节
long long 8个字节
指针         4个字节
64位平台
char         1个字节
short        2个字节
int            4个字节
long         8个字节(区别)
long long 8个字节
指针        8个字节(区别)

2.为了保证平台的通用性,程序中尽量不要使用long数据库型
3.编程中要尽量使用sizeof来计算数据类型的大小,如:int *p = (int *)malloc(sizeof(int)*100);而不要int *p = (int *)malloc(400);
4.使用int时也可以使用intptr_t来保证平台的通用性,它在不同的平台上编译时长度不同,但都是标准的平台长度,比如64位机器它的长度就是8字节,32位机器它的长度是4字节,定义如下: #if __WORDSIZE == 64
typedef long int                intptr_t;
#else
typedef int                        intptr_t;
#endif

5.ssize_t和size_t分别是unsigned和signed size of computer word size。它们也是表示计算机的字长,在32位机器上是int型,在64位机器上long型,从某种意义上来说它们等同于intptr_t和 uintptr_t。它们在stddef.h里面定义。需要注意的是socket的accept函数在有些操作系统上使用size_t是不正确的,因为 accept接收的int*类型,而size_t可能是long int 类型。后来BSD使用sock_t来替代它


1.几条规则
(1)char类型一般是8bit,但ANSI C里没有硬性规定其长度,某些嵌入式编译器可能是16bit
(2)short和long类型的长度不相同
(3)int类型通常同具体机器的物理字长相同
(4)short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短。

《C和指针》中写过:

long与int:标准只规定long不小于int的长度,int不小于short的长度.

The C Programming language这本书,里面有一句话是这样的:

编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。


int 的大小取决于机器和编译器,如:32位机,在vc++6.0中为int为4个字节长度,它在内存中所占的字节大小是不可以改变的(为了和CPU的字宽一致,提高处理速度。。。 仅仅是建议 具体由编译器决定的,  所以(自己猜的)64位时一般用long int 不用int)

操作系统16位的时候,int 2字节,操作系统32位的时候,int 4字节,由于32位系统之前占主流地位,实际现在就算是64位系统,(编译器)出于兼容性考虑,int也是4字节的















转载于:https://www.cnblogs.com/sssssnian/p/3748575.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值