前言

我们在进行编程时,对于int、long、long long经常使用,但是对于这些类型占用的字节长度可能不会太确定,尤其是在32位平台、64位平台,会有差异,这些知识点为基础知识,容易忽略的基础知识,本文做下分析记录。

不同平台整型字节长度区别

平台/类型 char short int long long long
16位 1 2 2 4 8
32位 1 2 4 4 8
64位 1 2 4 8 8

小结

  1. 在32位平台下,int型和long型是一致的,都是占用4个字节。long long 是8个字节。
  2. 在64位平台下,int型是占用4个字节,而long和long long都是占用8个字节的。
  3. 尽量不要使用long和long int,因为c/c++标准中,只限制了long int长度不小于int,并未限制long必须是4个字节或者8个字节,也就是跟平台相关,这主要是因为有一些历史兼容性原因。所以要使用明确的long long或者uint64_t

short int和int

int占用1个机器字长,在32位系统中int占32位,即4个字节,而在16位系统中,int占16位,即2个字节,在c++标准中只限制规定short int不能超过int的长度,具体长度可以由编译器的实现厂商决定,所以目前32位编译器中,
short int占2个字节,int 占4个字节,short int可以简写为short。类似的,c++标准只限制了long int不得小于int的长度,具体长度也没有作出限制。

long 和 long int

我们会看到long 和 long int,其实这两者对于编译器来说时一样的,我们在使用long时,其实已经默认包括了int,同样long long = long long int。
即long是long int的简写,同样的道理 long long是long long int的简写。

int64_t 和 uint64_t

这两种类型并不是标准的c定义的类型,而是通过typedef重命名的类型,定义在 stdint.h 中:

# if __WORDSIZE == 64
typedef long int        int64_t;
# else
__extension__
typedef long long int       int64_t;
# endif#if __WORDSIZE == 64
typedef unsigned long int   uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

从上面的代码也可以看到,如果编译器是64位平台,则uint64_t 其实时unsigned long int,而long int是占用8个字节的。反之,如果编译器是32平台,则uint64_t 是unsigned long long int,也是占用8个字节。

验证

程序如下:

#include <stdio.h>
#include <string.h>
#include <stdint.h>int main(void)
{printf("the os is 64 bit.\n");printf("__WORDSIZE:%d \n", __WORDSIZE);printf("char bytes:%d\n", sizeof(char));printf("short bytes:%d\n", sizeof(short));printf("int bytes:%d\n", sizeof(int));printf("float bytes:%d\n", sizeof(float));printf("long bytes:%d\n", sizeof(long));printf("long int bytes:%d\n", sizeof(long int));printf("long long bytes:%d\n", sizeof(long long));printf("long long int bytes:%d\n", sizeof(long long int));printf("uint64_t bytes:%d\n", sizeof(uint64_t));printf("uint32_t bytes:%d\n", sizeof(uint32_t));printf("size_t bytes:%d\n", sizeof(size_t));return 0;
}

执行结果如下:

the os is 64 bit.
__WORDSIZE:64
char bytes:1
short bytes:2
int bytes:4
float bytes:4
long bytes:8
long int bytes:8
long long bytes:8
long long int bytes:8
uint64_t bytes:8
uint32_t bytes:4
size_t bytes:8

int、long、long int、long long、uint64_t字节长度相关推荐

  1. C++ int、long、long int、long long、uint64_t字节长度

    前言 我们在进行编程时,对于int.long.long long经常使用,但是对于这些类型占用的字节长度可能不会太确定,尤其是在32位平台.64位平台,会有差异,这些知识点为基础知识,容易忽略的基础知 ...

  2. 32位机器和64位机器中int、char等数据类型所占字节长度对比

    在32位机器和64机器中int类型都占用4个字节.编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int ...

  3. 在C语言中,double、long、unsigned、int、char类型数据所占字节数

    和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<= ...

  4. mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  5. int和double究竟占多少个字节?c++等

    最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节.后来,查了The C Programming language这本书,里面有一句话是这样的:Each co ...

  6. mysql int后面的数字_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  7. mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  8. mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  9. int,long int,short int所占字节

    这个和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异.但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)< ...

最新文章

  1. iOS 打电话回到当前应用
  2. Python使用matplotlib可视化绘图时你可用的颜色有哪些?把色彩可视化出来自己选好了
  3. RISC-V有何特别之处?
  4. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现
  5. Visual C++ 编译器选项 /MD、/ML、/MT、/LD
  6. @FeignClient中的@RequestMapping也被SpringMVC加载的问题解决
  7. linux看java堆大小,linux 改java堆内存大小
  8. redis中value大小_查看redis的Value值大小
  9. Unity3D之NGUI基础4:NGUI图片管理工具AtlasMaker
  10. Eclipse 中部署应用到任意服务器
  11. MySQL用C访问的示例代码
  12. Windows下,Unicode、UTF8,GBK(GB2312)互转
  13. 机器人周志_机器人制造基础学习日志
  14. 偏微分方程数值解法pdf_数值模拟偏微分方程的三种方法:FDM、FEM及FVM
  15. 2020秋招提前批--大疆--机器学习算法工程师--线上笔试题
  16. tmux关机永久保存会话
  17. 电脑ping手机查看ARP抓包
  18. C++数组能开多大?
  19. 欢迎中文社区新版主@刘文艺
  20. Linux挂载Windows网络共享文件夹

热门文章

  1. Linux修改用户名后无法登入系统(乌班图)
  2. 【Calendar】HOUR和HOUR_OF_DAY的区别
  3. 刀片式服务器五种散热方法
  4. Python小技巧 - argmax
  5. 【ROS玩转Turtlesim小海龟】
  6. LM358信号放大电路
  7. 轻巧画图工具_网页设计师使用的20种超轻巧典雅字体
  8. 如何设计一个高性能Elasticsearch mapping
  9. C语言|结构声明/new对象/malloc使用
  10. RT-Thread Studio移植LAN8720A驱动