【C++】——数据类型(二)

news2025/1/13 15:53:46

文章目录

  • 2. 数据类型
    • 2.1 整型
    • 2.2 sizeof关键字
    • 2.3 浮点型
      • 2.3.1 浮点数表示——小数点表示法
      • 2.3.2 浮点数表示——E表示法
      • 2.3.3 浮点数类型
    • 2.4 字符型
    • 2.5 转义字符
    • 2.6 字符串型
    • 2.7 布尔类型bool

2. 数据类型

2.1 整型

    整数就是没有小数部分的数字,如2、98、 -5286 和0。整数有很多,如果将无限大的整数看作很大,则不可能用有限的计算机内存来表示所有的整数。因此,语言只能表示所有整数的-一个子集。有些语言只提供一种整型(一种类型满足所有要求!),而C++则提供好几种,这样便能够根据程序的具体要求选择最合适的整型。
    计算机内存由一些叫做位(bit) 的单元组成。C++的short、int、long和long long类型通过使用不同数目的位来存储值,最多能够表示4种不同的整数宽度。如果在所有的系统中,每种类型的宽度都相同,则使用起来将非常方便。例如,如果short 总是16位,int 总是32位,等等。不过生活并非那么简单,没有一种选择能够满足所有的计算机设计要求。C++提供了一种灵活的标准,它确保了最小长度(从C语言借鉴而来),如下所示:
● short至少16位;
● int 至少与short一样长;
● long至少32位,且至少与int一样长;
● long long至少64位,且至少与long一样长。

下面为64位操作系统中整型类型所占大小:

类型所占字节数表示范围
short int2-32,768 ~ 32,767
unsigned short int20 ~ 65,535
int4-2,147,483,648 ~ 2,147,483,647
unsigned int40 ~ 4,294,967,295
long int4-2,147,483,648 ~ 2,147,483,647
unsigned long int40 ~ 4,294,967,295
long long in8-92233372036854775808 ~ 922333720368547758087
unsigned long long int80 to 18,446,744,073,709,551,615
// limits.cpp -- some integer limits
#include <iostream>
#include <climits>  // use limits.h for older systems
 
int main()
{
    using namespace std;
 
    int n_int = INT_MAX;  // initialize n_int to max int value
    short n_short = SHRT_MAX; // symbols defined in climits file
    long n_long = LONG_MAX;
    long long n_llong = LLONG_MAX;
 
    // sizeof operator yields size of type or of variable
    cout << "int is " << sizeof(int) << " bytes." << endl;
    cout << "short is " << sizeof n_short << " bytes." << endl;
    cout << "long is " << sizeof n_long << " bytes." << endl;
    cout << "long long is " << sizeof n_llong << " bytes." << endl;
    cout << endl;
 
    cout << "Maximum values:" << endl;
    cout << "int: " << n_int << endl;
    cout << "short: " << n_short << endl;
    cout << "long: " << n_long << endl;
    cout << "long long: " << n_llong << endl;
 
    cout << "Minimum int value = " << INT_MIN << endl;
    cout << "Bits per byte = " << CHAR_BIT << endl;
    
    cout << "char的位数[CHAR_BIT] : " << CHAR_BIT << endl;
 
    cout << "char的最大值[CHAR_MAX] : " << CHAR_MAX << endl;
    cout << "char的最小值[CHAR_MIN] : " << CHAR_MIN << endl;
 
    cout << "signed char 最大值[SCHAR_MAX] : " << SCHAR_MAX << endl;
    cout << "signed char 最小值[SCHAR_MIN] : " << SCHAR_MIN << endl;
    cout << "unsigned char 最大值[UCHAR_MAX] : " << UCHAR_MAX << endl;
 
    cout << "short 最大值[SHRT_MAX] : " << SHRT_MAX << endl;
    cout << "short 最小值[SHRT_MIN] : " << SHRT_MIN << endl;
    cout << "unsigned short 最大值[USHRT_MAX] : " << USHRT_MAX << endl;
 
    cout << "int 最大值[INT_MAX] : " << INT_MAX << endl;
    cout << "int 最小值[INT_MIN] : " << INT_MIN << endl;
    cout << "unsigned int 最大值[UINT_MAX] : " << UINT_MAX << endl;
 
    cout << "long 最大值[LONG_MAX] : " << LONG_MAX << endl;
    cout << "long 最小值[LONG_MIN] : " << LONG_MIN << endl;
    cout << "unsigned long 最大值[ULONG_MAX] : " << ULONG_MAX << endl;
 
    cout << "long long 最大值[LLONG_MAX] : " << LLONG_MAX << endl;
    cout << "long long 最小值[LLONG_MIN] : " << LLONG_MIN << endl;
    cout << "unsigned long long 最大值[ULLONG_MAX] : " << ULLONG_MAX << endl;
 
    return 0;
}
int is 4 bytes.
short is 2 bytes.
long is 4 bytes.
long long is 8 bytes.

Maximum values:
int: 2147483647
short: 32767
long: 2147483647
long long: 9223372036854775807
Minimum int value = -2147483648
Bits per byte = 8
char的位数[CHAR_BIT] : 8
char的最大值[CHAR_MAX] : 127
char的最小值[CHAR_MIN] : -128
signed char 最大值[SCHAR_MAX] : 127
signed char 最小值[SCHAR_MIN] : -128
unsigned char 最大值[UCHAR_MAX] : 255
short 最大值[SHRT_MAX] : 32767
short 最小值[SHRT_MIN] : -32768
unsigned short 最大值[USHRT_MAX] : 65535
int 最大值[INT_MAX] : 2147483647
int 最小值[INT_MIN] : -2147483648
unsigned int 最大值[UINT_MAX] : 4294967295
long 最大值[LONG_MAX] : 2147483647
long 最小值[LONG_MIN] : -2147483648
unsigned long 最大值[ULONG_MAX] : 4294967295
long long 最大值[LLONG_MAX] : 9223372036854775807
long long 最小值[LLONG_MIN] : -9223372036854775808
unsigned long long 最大值[ULLONG_MAX] : 18446744073709551615

2.2 sizeof关键字

    作用:利用sizeof关键字可以统计数据类型所占内存的大小。
    语法:sizeof(数据类型/变量)

2.3 浮点型

    了解各种C++整型后,来看看浮点类型,它们是C++的第二组基本类型。浮点数能够表示带小数部分的数字,如M1油箱的汽油里程数(0.56MPG),它们提供的值范围也更大。如果数字很大,无法表示为long类型,如人体的细菌数(估计超过100兆),则可以使用浮点类型来表示。
    使用浮点类型可以表示诸如2.5、3.14159 和122442.32这样的数字,即带小数部分的数字。计算机将这样的值分成两部分存储。一部分表示值,另一部分用于对值进行放大或缩小。下面打个比方。对于数字34.1245和34124.5,它们除了小数点的位置不同外,其他都是相同的。可以把第一一个 数表示为0.341245 (基准值)和100 (缩放因子),而将第二个数表示为0.341245 (基准值相同)和10000 (缩放因子更大)。缩放因子的作用是移动小数点的位置,术语浮点因此而得名。C++内部表示浮点数的方法与此相同,只不过它基于的是二进制数,因此缩放因子是2的幂,不是10的幂。幸运的是,程序员不必详细了解内部表示。重要的是,浮点数能够表示小数值、非常大和非常小的值,它们的内部表示方法与整数有天壤之别。

2.3.1 浮点数表示——小数点表示法

    C++有两种书写浮点数的方式。第一种是使用常用的标准小数点表示法:

12.34
939001.32
0.00023
8.0

2.3.2 浮点数表示——E表示法

    第二种表示浮点值的方法叫做E表示法,其外观是像这样的: 3.45E6, 这指的是3.45与1000000相乘的结果; E6指的是10的6次方,即1后面6个0。因此,3.45E6 表示的是3450000,6被称为指数,3.45被称为尾数。下面是一些例子:

2.52e+8
8.33E-4
7E5
-18.32e13
1.69e12
5.98E24
9.11e-31

    E表示法最适合于非常大和非常小的数。
    E表示法确保数字以浮点格式存储,即使没有小数点。注意,既可以使用E也可以使用e,指数可以是正数也可以是负数。然而,数字中不能有空格,因此7.2 E6是非法的。
在这里插入图片描述

E表示法

2.3.3 浮点数类型

    和ANSIC-样,C++也有3种浮点类型: float、 double 和long double。这些类型是按它们可以表示的有效数位和允许的指数最小范围来描述的。有效位(significant figure)是数字中有意义的位。
    事实上,C和C++对于有效位数的要求是, float至少32位, double至少48位,且不少于float, long double至少和double一样多。这三种类型的有效位数可以一样多。然而,通常,float 为32位,double 为64位,long double为80、96或128位。下面程序演示了float与double的精度差异。

#include<iostream>
int main()
{
    using namespace std;
    cout.setf(ios_base::fixed,ios_base::floatfield);
    float tub = 10.0 / 3.0;
    double mint = 10.0 / 3.0;
    const float million = 1.0e6;
    
    cout << "tub = " << tub;
    cout << ", a million tubs = " << million * tub;
    cout << ",\nand ten million tubs = ";
    cout << 10 * million * tub << endl;
 
 
    cout << "mint = " << mint << " and a million mints = ";
    cout << million * mint << endl;
    return 0;
}
tub = 3.333333, a million tubs = 3333333.250000,
and ten million tubs = 33333332.000000
mint = 3.333333 and a million mints = 3333333.333333

说明
    通常cout会删除结尾的零。例如,将333333.250000显示为333333.25。调用cout.setf()将覆盖这种行为。tub 和mint都被初始化为10.0/3.0- 3.3333333333333…由于. cout打印6位小数,因此tub和mint都是精确的。但当程序将每个数乘以一百万后,tub 在7位有效位上还是精确的,但在第7个3之后就与正确的值有了误差。double 类型的变量显示了13个3,因此它至少有13位是精确的。
    cout所属的ostream类有一个类成员函数,能够精确地控制输出的格式一字段宽度、 小数位数、采用小数格式还是E格式等。

2.4 字符型

作用:字符变量用于显示单个字符。
语法char ch = 'a';

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号
注意2:单引号内只能有一个字符不可以是字符串

  • C/C++中字符型变量只占1个字节。
  • 字符型变量并不是把字符本身放到内存中存储,而是放入其对应的ASCII码。

程序示例:

// morechar.cpp -- the char type and int contrasted
#include <iostream>
 
int main()
{
    using namespace std;
    char ch = 'M';
    int i = ch;
    cout << "The ASCII code for " << ch << " is " << i << endl;
 
    cout << "Add one to the character code: " << endl;
    ch = ch + 1;
    i = ch;
    cout << "The ASCII code for " << ch << " is " << i << endl;
 
    // using the cout.put() member function to display a char
    cout << "Displaying char ch using cout.put(): ";
    cout.put(ch);
    cout.put('!');
 
    cout << endl << "Done" << endl;
 
    return 0;
}
The ASCII code for M is 77
Add one to the character code:
The ASCII code for N is 78
Displaying char ch using cout.put(): N!
Done

说明
    在程序中,‘M’ 表示字符M的数值编码,因此将char变量ch初始化为’M’, 将把c设置为77。然后,程序将同样的值赋给int变量i,这样ch和i的值都是77。接下来,cout把ch显示为M,而把i显示为77。如前所述,值的类型将引导cout选择如何显示值一这 是智能对象的另一个例子。
    由于ch实际上是一一个整数,因此可以对它使用整数操作,如加1,这将把ch的值变为78。然后,程序将i重新设置为新的值(也可以将i加1)。cout再次将这个值的char版本显示为字符,将int版本显示为数字。

2.5 转义字符

作用:用于表示一些不能显示出来的ASCII字符
    下表为C++转义序列的编码
在这里插入图片描述

2.6 字符串型

作用:用于表示一串字符。
两种风格

  1. C风格: char 变量名[] = “字符串值”
#include <iostream>
 
int main()
{
    using namespace std;
   char str[] = "hello";

   cout<<str<<endl;
   system("pause");
 
    return 0;
}
  1. C++风格:string 变量名 = “字符串值”
#include <iostream>
#include <string>
int main()
{
   using namespace std;
   string str = "hello";

   cout<<str<<endl;
   system("pause");
 
    return 0;
}

2.7 布尔类型bool

作用:布尔数据类型代表真或假的值
bool类型只有两个值:

  • true ——真(1)
  • false——假(0)

bool类型只占用1个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】模型评估与选择(实战)

模型评估与选择&#xff08;实战&#xff09; 目录一、准备工作&#xff08;设置 jupyter notebook 中的字体大小样式等&#xff09;二、数据集读取与查看三、交叉验证实验1、划分数据集并置乱2、设计交叉验证实验3、进行训练&#xff08;采用随机梯度下降分类器&#xff09;4、…

推荐一款数据可视化分析工具

当今时代数据分析的发展&#xff0c;导致数据可视化成为企业必不可少的一部分&#xff0c;进而市面上也就涌现出各种丰富多彩的工具。传统的Excel无疑是数据可视化工具的典型&#xff0c;我们平时经常使用Excel制作简单表格&#xff0c;简单、方便&#xff0c;但是复杂一点的可…

酒业崛起一支奇兵,009将自信走向全球

“天若不爱酒&#xff0c;酒星不在天。地若不爱酒&#xff0c;地应无酒泉。天地既爱酒&#xff0c;爱酒不愧天。”这是李白《月下独酌》中的句子&#xff0c;诗仙也是酒仙&#xff0c;已是广为人知的轶事。 中国是酒的国度&#xff0c;酒也是历史和文化的一种表达。正因为如此&…

【读书笔记】高级FPGA设计之面积结构设计

目录 面积结构设计 折叠流水线 基于控制的逻辑复用 资源共享 复位对面积的影响 无复位的资源 无置位的资源 无同步复位的资源 复位 RAM 利用置位/复位触发器引脚 总结 面积结构设计 本篇讨论数字设计的三个主要物理特性的第二个&#xff1a;面积。并分析在FPGA中结构…

【代码随想录】Day67哈希表:力扣242,383,1,349,202,454,15,18

目录 基础知识 哈希表 哈希函数 2.哈希碰撞 常见的哈希结构&#xff08;三种&#xff09; 数组 集合set 映射map 经典题目 数组作为哈希表 例题&#xff1a;力扣242 已完成 例题&#xff1a;力扣383 已完成 例题&#xff1a;力扣49 例题&#xff1a;力扣438 set…

小黑实习第二天,正在为hbase而头疼的leetcode之旅:671. 二叉树中第二小的节点

小黑代码(暴力) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def findSecondMinimumValue(self, root: …

执照吊销了能否恢复

一、执照吊销了能否恢复 &#xff11;、按照法律规定&#xff0c;企业法人被吊销营业执照&#xff0c;只是企业解散程序的开始。《公司法》规定&#xff0c;企业法人被吊销营业执照后应当依法进行清算&#xff0c;清算程序结束并办理工商注销登记后&#xff0c;该企业法人才归…

间隔分区表merge into报错“-2903: 语句块/包/存储函数中的间隔分区不支持自动扩展”

描述 版本&#xff1a; DM V8 --08134283904-20220804-166351-20005 Pack4 初始化参数&#xff1a; 默认 ini参数&#xff1a; 默认 执行间隔分区表上执行merge into语句报错&#xff0c;信息如下&#xff1a; 同样的语句&#xff0c;在Oracle中执行正常。 测试 创建环境&a…

Springboot利用redis缓存,结合Aop与自定义注解实现接口节流

接口的节流是开发过程中为了防止单一微服务模块突然遭受太多并发导致用户服务不流畅而产生的业务需求&#xff0c;就是实现在固定时间内访问同一个接口的次数也固定。开发过程中通常采用redis去作为缓存去快存快取&#xff0c;对于需求次数较多的数据可以存储在redis内部&#…

Ansible剧本使用

剧本语言 剧本使用的yaml语言 yaml文件的后缀为.yml或者.yaml 使用空格做为缩进 相同层级的元素左侧对齐即可 缩进时不允许使用 Tab 键&#xff0c;只允许使用空格 创建剧本 直接编辑不存在会自动创建这个文件&#xff0c;先用touch新建也行 vim juben.yml编写剧本 hosts&am…

C语言零基础项目:2D 赛车游戏,详细思路+源码分享

目录 一、简介 二、如何建立一个地图包 三、关于碰撞图的绘制 四、游戏时的说明 五、如何更好地绘制赛场图与碰撞图&#xff1f; 游戏截图 源码下载 一、简介 此游戏是《2D 赛车》的”魔改版“——2.5D 双人赛车&#xff01; 原作实现了 2D 视角的赛车游戏&#xff0c…

关于 国产麒麟系统赋值给双精度double时乘以1.0f编译器优化 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128459376 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

【 uniapp - 黑马优购 | 首页】小程序首页全局配置(home、网络请求、轮播图、分类...)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…

csdn里的KaTex 公式语法

KaTex 语法 Accents 字母各种上下标 波浪&#xff0c;箭头&#xff0c;声调等 Delimiters 分隔符 大括号&#xff0c;小括号&#xff0c;方括号 Environments 行列式里多行多列数字表达式包含 HTML Letters and Unicode 字符和 Unicode Layout 布局 Spacing 空格 Logic and Se…

Centos系统,防火墙没开,docker部署的rabbitmq不能外网访问监听端口,但别的端口都能正常访问???

真是一个神奇的问题&#xff0c;防火墙firewalld ,iptables都没开。 之前访问都正常&#xff0c;最近可能是服务器被动了。rabbitmq的相关监听接口&#xff0c;只能本机服务器连接了&#xff0c;导致设备连接不了rabbitmq组件了。 排查问题记录 1.防火墙是否开启。发现是关闭…

web仿真或实际内存分析应用及自动化方案

js 自带 GC&#xff08;垃圾回收&#xff09;机制&#xff0c;因此绝大多数 web 开发人员不会在日常开发中考虑内存情况&#xff08;包括本人&#xff09;&#xff0c;在多数业务场景中&#xff0c;这可能没有问题&#xff0c;但在一些核心web应用场景下&#xff08;比如某个页…

【Spring(一)】初识Spring(史上最详细的Spring介绍!)

文章目录前言1.初识Spring2.Spring Framework系统架构3.核心概念前言 在学习 Spring 之前&#xff0c;我们需要先知道为什么要学习它?    IT业的任何一门技术,它只有抢占了很强的市场占有率&#xff0c;才会有更多的人使用和学习它&#xff0c;Spring技术在我们Java开发界拥…

APP怎么免费接入MobPush

1、获取AppKey 申请Appkey的流程&#xff0c;请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid70819 2、下载SDK 下载解压后&#xff0c;如下图&#xff1a; 目录结构 &#xff08;1&#xff09;Sample&#xff1a;演示Demo。&#xff08;2&#xff09;SDK&#…

【C操作符】详解操作符

操作符前言一、操作符分类二、算数操作符三、移位操作符&#xff08;一&#xff09;原码、补码、反码&#xff08;二&#xff09;操作符应用1.左移操作符&#xff08;1&#xff09;正数&#xff08;2&#xff09;负数&#xff08;3&#xff09;总结2.右移操作符&#xff08;1&a…

《码出高效:java开发手册》六-数据结构与集合(二)

前言 接上篇&#xff0c;第六章第二部分&#xff0c;上篇讲到了红黑树的FixAfterInsertion方法&#xff0c;这个方法原理与fixAfterDelete类似&#xff0c;只讲这个添加时的调整方法 代码可以看到&#xff0c;调整后的根节点一定是黑色的&#xff0c;叶子节点可红可黑&#x…