初学时候看的文章都是说根据cpu和编译器位数来区分


但是经过实际测试发现有点问题,使用intel 64位处理器,64位操作系统,vs2017编译器为64位,对int,long,long long三种类型大小进行测试

#include <iostream>
#include <cstring>
#include<cassert>
#include<climits>
using namespace std;int main()
{int *p;cout << "int * = " << sizeof(p) << endl;cout << "int: "<<sizeof(int) << endl;cout << "long int: " << sizeof(long int) << endl;cout << "long long int: " << sizeof(long long int) << endl;}

输出结果

通过指针类型可以看出来编译器确实选择的是64位,但是long和int都是4个字节,与上面的图片不符。

后来看c++相关书籍了解到对于long类型不是单纯通过32位或者64位来决定,而是根据编译平台来决定的,具体是在climits这个头文件里,对应c的话是limits.h中的宏定义来决定所占字节

#define INT_MIN     (-2147483647 - 1) // minimum (signed) int value
#define INT_MAX       2147483647    // maximum (signed) int value
#define UINT_MAX      0xffffffff    // maximum unsigned int value
#define LONG_MIN    (-2147483647L - 1) // minimum (signed) long value
#define LONG_MAX      2147483647L   // maximum (signed) long value
#define ULONG_MAX     0xffffffffUL  // maximum unsigned long value
#define LLONG_MAX     9223372036854775807i64       // maximum signed long long int value
#define LLONG_MIN   (-9223372036854775807i64 - 1)  // minimum signed long long int value
#define ULLONG_MAX    0xffffffffffffffffui64       // maximum unsigned long long int value

其中MIN和MAX代表取值返回,下划线前面代表类型,U代表无符号,从中可以看到,本平台中int所占为4字节,long也为4个字节,long long为8个字节,不同的编译平台对long的定义可能是不一样的,可以通过这个文件来查看本平台中long定义的大小。

c++中int, long, long long都占几个字节和编译平台定义有关相关推荐

  1. C#开发笔记之22-C#中的int、long、float、double等类型都占多少个字节的内存。

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之22-C#中的int.long.float.double等类型都占多少个字节的内存. | .Net中文网. C#开发笔记 ...

  2. c语言中长整型的作用,C语言,整形和长整型都占四个字节?

    C语言中,整型常量和长整型常量,有什么区别? 整型常量和长整型常量(包括有符号的和无符号的),为什么占用字节数和一.指代不同 整型常量:是通常的整数,包括正整数.负整数和0,其数据类型显然是整型. 长 ...

  3. JAVA中的char和boolean到底占几个字节?

    对于JAVA中的大部分数据类型,书中都有明确的表示: byte:1字节,short:2字节,int:4字节,long:8字节 float:4字节,double:8字节. 然而对于boolean和cha ...

  4. C语言实现统计字符串中中文汉字个数(针对汉字占三个字节有效)

    /* 对于汉字字符串:str[4]="你" 在UTF-8中:"你"占3bytes,在GBK与UTF-16中占2bytes 每个字节所对应的ASCII码值小于0, ...

  5. Java中字符编码问题和中文占几个字节的问题(ASCII Unicode UTF-8 )

    ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个字 ...

  6. 【C++】char、int、short、指针占几个字节

    常量的定义以及表示范围: unsigned int 0-4294967295 就是2^32-1 int -2147483648-2147483647 就是-2^(31) ~ 2^31-1 unsign ...

  7. 64位系统,定义int* a[2][3],占几个字节?

    参考:http://www.tilaile.com/question/13011 答案:24字节 原因: 64位系统,即64根地址总线,即可最大寻址个数2^64,需要64个二进制位存储,即8字节.(最 ...

  8. char、int、long它们各占几个字节?占几位?

    转自:http://wenwen.soso.com/z/q104804861.htm 整型 int 4字节 长整型 long 4字节 字符型 char 1字节 单精度 float 4字节 双精度 do ...

  9. java 的整数类型都占几个字节

    类型 占用存储空间 表数大小 byte 1字节 -128-127 short 2字节 -215~215-1 int 4字节 -231~231-1 long 8字节 -263~263-1

最新文章

  1. ubuntu下vim的配置
  2. Linux boot启动串口出现乱码,使用 am335x-evm-sdk-src-02.00.01.07 的源码,UBOOT阶段使用LCD控制器后,内核启动串口控制台输出乱码。...
  3. float x 与“零值”比较的if语句为?
  4. VS2008快捷键大全
  5. opencv连通域去除小块面积_晋中市建成区面积排名,榆次区最大,榆社县最小,来了解一下?...
  6. manual php,PHP - Manual: 介绍 (官方文档)
  7. Redis笔记(六):Java中使用Redis
  8. 【计算机组成原理】乘法阵列器
  9. lambda设计模式_使用lambda的装饰器设计模式
  10. 【安卓开发】Android初级开发(okhttp3发送带header与带参数的GET请求)
  11. MinIO Client完全指南 ​​​​​​​
  12. 利用SCCM2012中的导入计算机功能来实现定制化的操作系统部署
  13. bc8android汽车中控屛功能有哪些,安卓大屏功能强大 卡仕达顺车机一机全能
  14. Spring Boot 2.x 集成 Quartz 定时器 jdbc 持久化、配置集群
  15. 【用电量预测】基于matlab SVM用电量预测【含Matlab源码 103期】
  16. windows开启远程桌面命令
  17. Mysql存储过程和函数区别介绍
  18. oracle 模糊查询语法
  19. 科密t1消费管理系统_科密A1\T1登录密码获取软件-科密A1\T1登录密码获取工具1.0.0 安卓版-东坡下载...
  20. DIY手机万能红外遥控器

热门文章

  1. 概率论重修笔记 6二维连续型.md
  2. 量化交易入门笔记-策略回测与评估
  3. SAP 系统中,MRO指的是什么
  4. 程序验证(1)- 简介
  5. HI3518E新手开发步骤
  6. 判空我推荐StringUtils.isBlank
  7. raise Exception(“Install ‘email_validator‘ for email validation support.“)Exception: Install ‘emai
  8. xxl-job registry fail, registryParam:RegistryParam{regist
  9. 源码推荐: 720度全景展示 for iOS
  10. GPE服务器监控系统搭建