一、基本类型的大小及范围的总结(以下所讲都是默认在32位操作系统下):

字节:byte;位:bit。

1.短整型short:所占内存大小:2byte=16bit;所能表示范围:-32768~32767;(即-2^15~2^15-1)

unsigned short:所占内存大小:2byte=16bit;所能表示范围:0~65535;(即0~2^16-1)

2.整型int:所占内存大小:4byte=32bit;所能表示范围:-2147483648~2147483647;(即-2^31~2^31-1)

unsigned int: 所占内存大小:4byte=32bit;所能表示范围:0~4294967295;(即0~2^32-1)

3.长整型long:所占内存大小:4byte=32bit;所能表示范围:-2147483648~2147483647;(即-2^31~2^31-1)

unsigned long: 所占内存大小:4byte=32bit;所能表示范围:0~4294967295;(即0~2^32-1)

注:上面所说的全部是有符号型的,short,int,long都默认为有符号型,其中long和int都占4个字节的空间大小,他们有什么区别呢?

16位操作系统:long:4字节,int:2字节
32位操作系统:long:4字节,int:4字节
64位操作系统:long:8字节,int:4字节

int型在不同位数操作系统中所占用的字节数不同,如果想编写可移植性好的程序,早年流行16位和32位操作系统时最好用long修饰int型,现在流行32位和64位操作系统,用int就挺多了。当然这些都看你怎么去理解它了,毕竟它们在不同操作系统所占字节数不固定,所以各自都有其适用之处,不可定论其好坏。

下面是对它们的有科学依据的规定:

C语言规定:无论什么平台都要保证long型占用字节数不小于int型, int型不小于short型。

4.字符型char:所占内存大小:1byte=8bit;所能表示范围:不确定!!!!;

unsigned char:所占内存大小:1byte=8bit;所能表示范围:0~255;(0~2^8-1)

signed char: 所占内存大小:1byte=8bit;所能表示范围:-128~127;(-2^7~2^7-1)

char的默认类型不确定有可能是unsigned,也有可能是signed,主要更具编译器而定,可以自己测试一下编译器的默认char的符号类型。

5.布尔类型bool:所占内存大小:1byte=8bit;所能表示的范围:只能取两个值false或者true;所以最小值就是:0, 最大值:1.

6.单精度float: 所占内存大小:4byte=32bit;所能表示的范围:(1.17549e-038)~(3.40282e+038);

//注意:浮点数在内存中都是按科学计数法来存储的,浮点数的精度是由尾数的位数决定的,大家记住即可不必深究;

7.双精度double:所占内存大小:8byte=64bit;所能表示的范围:(2.22507e-308)~(1.79769e+308);

注:如何区分和使用这两个浮点类型呢,首先float和double的精度不同,float保留到小数点后面7位,而double保留到小数点后面16位,float能保证6位有效数字,而double能保证15位有效数字,如果在不追求精度的的情况下当然用 float比较好,节省内存,如果需要很高的精度的情况下,最好还是用double,平时我们定义浮点型变量一般都用double,毕竟精度高,一般精度的损失是不能忽略的。

这里主要是和浮点格式存储数据相关,单双精度的存储数据的浮点格式中的尾数和阶数表示长度不同,进而导致表示范围和精度不同。

8.字符串string:由于string在c++中属于类类型,不是基本数据类型,类不能计算其在内存中所占大小,非要用sizeof(string)来算的话,一般算出来的结果是 sizeof(string)=4byte, 如果string字符串内容很多,很明显就不是其真实大小,string类里面有计算其字节大小的函数如:size(),length()。

总结
我们在使用基础数据类型时原则是:就要保证精度、防止溢出、又要尽可能的少地占用内存。在计算机语言中,,数据类型的内涵除了包括数据的存储位数和存储格式之外,还隐含包括了该类型数据可进行那些运算,比如整型和实数都可以进行算数运算(加减乘除),可也进行关系运算(即比较大小),但是整型还可以进行位运算,而实数不行。
以上就是本文关于C和C++中的基本数据类型的大小及表示范围详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
————————————————
版权声明:本文为CSDN博主「卖火柴的小男孩2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014644594/article/details/103886264

C++基本数据类型范围和区别(详细)的更多相关文章

  1. MySQL与Oracle的语法区别详细对比

    MySQL与Oracle的语法区别详细对比 Oracle和mysql的一些简单命令对比在本文中将会涉及到很多的实例,感兴趣的你不妨学习一下,就当巩固自己的知识了   Oracle和mysql的一些简单 ...

  2. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

  3. bower 和 npm 的区别详细介绍

    摘要: 本文讲的是bower 和 npm 的区别详细介绍, 简单的说,npm是进行后端开发中,使用的模块安装工具,而bower,是前端的模块安装工具. 比如,在安装express,socket.io时 ...

  4. C/C++动态分配与释放内存的区别详细解析

    以下是对C与C++中动态分配与释放内存的区别进行了详细的分析介绍,需要的朋友可以过来参考下 1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配 ...

  5. JavaScript中instanceof与typeof运算符的用法及区别详细解析

    JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ...

  6. js onkeypress与onkeydown 事件区别详细说明

    keypress只适用于有字符输入的按键 而keyup/keydown包含了Ctrl, Shift之类的情况 Firefox在处理onKeyDown/onKeyPress事件时存在漏洞,恶意网页可能利 ...

  7. char str[] 与 char *str的区别详细解析

    char* get_str(void) { char str[] = {"abcd"}; return str; } char str[] = {"abcd"} ...

  8. MySQL与Oracle的语法区别详细对比 (转)

    Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...

  9. [转]MySQL与Oracle的语法区别详细对比

    Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...

随机推荐

  1. 动态SQL常用标签

    动态 SQL 目的:为了摆脱在不同条件拼接 SQL 语句的痛苦 在不同条件在生成不同的SQL语句 本质上仍然是SQL语句,不过是多了逻辑代码去拼接SQL,只要保证SQL的正确性按照格式去排列组合 可以 ...

  2. 服务器上详细前后端分离项目搭建(springboot+vue)

    介绍:本文用的经典的前后端分离开源项目ruoyi Gitee链接地址:https://gitee.com/y_project/RuoYi 一.拉取项目: 利用Git把项目拉取到本地,也可以直接利用id ...

  3. nginx1.1 nginx介绍和反向代理

    1.什么是nginx nginx是一个高性能的http和反向代理的web服务器,所占内存小,高并发 nginx默认端口:80端口 命令存放目录:cd /usr/local/nginx/sbin 配置文 ...

  4. 详细剖析pyecharts大屏的Page函数配置文件:chart_config.json

    目录 一.问题背景 二.揭开json文件神秘面纱 三.巧用json文件 四.关于Table图表 五.同步讲解视频 5.1 讲解json的视频 5.2 讲解全流程大屏的视频 5.3 讲解全流程大屏的文章 ...

  5. unity---判断物体碰撞的对象

    脚本效果 trrn对象为地面,排除这个选项

  6. 基于 BaGet 搭建 Nuget 服务器

    1 前言 1.1 BaGet 介绍 BaGet 是一个轻量级的,开源的,跨平台的 Nuget 和 symbol 服务器. 1.2 环境介绍 操作系统:CentOS 7 使用 Docker 安装 2 安 ...

  7. CentOS7 单节点和多节点 HPL测试

    前置工作:安装OpenBLAS; 安装Mpich (可参考首页博客) 官网下载压缩包到/opt目录 cd /opt && wget https://www.netlib.org/ben ...

  8. MongoDB 设置用户和密码

    每日一句 Zeal without knowledge is fire without light. 没有知识的热忱犹如火之无光. 给每个数据库设置单独的管理员 我们除了可以设置数据库的超级管理员以外 ...

  9. Docker 与 K8S学习笔记(二十三)—— Kubernetes集群搭建

    小伙伴们,好久不见,这几个月实在太忙,所以一直没有更新,今天刚好有空,咱们继续k8s的学习,由于我们后面需要深入学习Pod的调度,所以我们原先使用MiniKube搭建的实验环境就不能满足我们的需求了, ...

  10. Python <算法思想集结>之抽丝剥茧聊动态规划

    1. 概述 动态规划算法应用非常之广泛. 对于算法学习者而言,不跨过动态规划这道门,不算真正了解算法. 初接触动态规划者,理解其思想精髓会存在一定的难度,本文将通过一个案例,抽丝剥茧般和大家聊聊动态规 ...