c++中的基本类型

news2024/9/23 11:13:16

专栏简介:为什么我要重新介绍c++的相关知识,在此之前,我对于c++的了解也仅仅是在表面。而在后来与c++慢慢的接触中,c++编程语言越来越让我觉得深奥,所以还是想要重新开创一个专栏来介绍c++。对于c++的介绍,本专栏会先介绍98版的c++知识,之后会介绍11版的c++知识。

日常分享:每天努力一点,不为别的,只是为了日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!

 

目录

一、基本内置类型

1.1、算术类型

1.1.1、带符号类型和无符号类型

1.2、类型转换

1.2.1、无符号类型表达式

1.3、字面值常量

1.3.1、整型和浮点型字面值

1.3.2、字符和字符串字面值

1.3.3、转义序列

1.3.4、指定字面值的类型

1.3.5、布尔字面值和指针字面值


一、基本内置类型

c++中的内置数据类型包括算术类型空类型。其中算术类型包含了字符、整数、布尔和浮点数。

1.1、算术类型

算术类型分为两类,一类是整型,一类是浮点型。而无论是哪种类型。均有一个数值大小限制,而数据类型的大小是以字节来作为单位的。

算术类型
类型含义最小尺寸
int整型16位(最低来两字节)
bool布尔类型未定义
char字符8位(1字节)
wchar_t宽字符16位
char16_tunicode字符16位
char32_tunicode字符32位
short短整型16位
long长整型32位
long long长整型64位
float单精度浮点型6位有效数字
double双精度浮点型10位有效数字
long double扩展精度浮点型10位有效数字

上面说的位指的是比特位,8个比特位为一个字节8个字节为一个字(通常情况)。由于计算机是通过二进制来进行存储的,所以说,对于不同数值大小的数据也要用不同的数据类型来定义,具体的大小参考上表。

1.1.1、带符号类型和无符号类型

除了布尔型和扩展的字符型外,其他整型可以划分为有符号类型(signed)和无符号类型(unsigned)。有符号类型表示的是所有整数,包括负数,0,正数。而无符号类型则只能表示大于等于0的正数。

在数据类型的前面添加unsigned就可以表示无符号类型,而对于字符型char,也被分为三种,char、signed char、unsigned char。注意类型char和signed char是不一样的,虽然说有三种类型,但是一般只认为有符号无符号两种类型,类型char至于具体是那一种,要看编译器。

特别注意一下,unsigned所定义的数据类型,他的所有比特位均用来放置数值,也就是高位不会存在用于判别正数还是负数的符号位。比如8比特的unsigned char可以存放0~255之间的值,而8比特位的signed char存放的是-128~127之间的数值。

对于编程过程中,在选用数据类型的时候要个根据具体的变量需求来进行选择。但是有一些经验准则是可以用的:

🕐、在确定是否要选择无符号类型时,先要确定数值是否不可能为负。

🕑、进行整数运算的时候,尽量使用int类型,如果不够长就是用long long。

🕒、在进行算术运算时,不要使用char类型,不同的编译器对char的定义不同,可能会出现在这个机器上能跑,另一个机器上就不能跑的情况。

🍀、在选择浮点类型时,建议选择double类型,float类型的精度太低,而且在目前这种情况下,float和double消耗的资源差距不是特别大,而long double则不推荐使用,消耗的资源太大。

1.2、类型转换

类型转换说白了就是将原本定义的对象的数据类型转化成其他数据类型。关于类型转换这个问题,很多人都会遇到类型转换失败导致资源浪费,甚至出现数据泄漏问题。所以说关于数据类型转换这个问题对于新手还是存在很大的问题。很多人看书,书上会说int可以转为double,但是有时候double又不能转为int,如果只是去背诵转换准则,则显得比较困难。所以对于类型和转换,我给出我的编程经验。

类型转换准则:

🕐、内存小的数据类型可以转化为大内存的数据类型,比如4字节的int类型可以转换成double类型。而对于高内存的数据类型转换成小内存的时候,必须要判断数值大小是否超过了转换后数据类型的大小。

类型转换过程:

🕐、当我们把非布尔型转化成布尔型时,如果初始值为0,则为false,否则为true。

🕑、把布尔值赋值给非布尔的时候,初始值为true则结果位1,否则为0.

🕒、浮点数赋值给整数的时候,结果仅保留浮点数中的整数部分,小数点后面的数值直接摒弃。

🕔、当我们赋值给无符号类型一个超出他表示的范围后,结果是初始值对无符号类型表示的数值总数取模后的余数。

🕕、当我们赋值给有符号类型一个超过他本身表示范围的值时,结果是未定义的。很有可能导致程序崩溃,这就和上面我讲的大范围转小范围时要注意数值。

1.2.1、无符号类型表达式

在讲解无符号类型表达式之前,我们先来看一段代码:

#include<iostream>
int main()
{
unsigned u=10;
int i=-30;
std::cout<<i+i<<std::endl;
std::cout<<i+u<<std::endl;
return 0;
}

最后运行结果是:

-60
4294967276

为什么是这个答案喃?这是由于,在无符号表达式中,会将有符号数值变为无符号数值, 负数转化成无符号数值时,就是将该数值加上无符号数的模。就比如上面的例子,int占据4个字节,也就是32位,那么无符号数最大是2的32次方,也就是4294967296,加上-30,就是转化后的无符号数。

1.3、字面值常量

在c++中,形如10这种确切的值被称为字面值常量(litera),每一个字面值都会存在一种数据类型,换句话说,字面值的形式和值决定了它的数据类型。

1.3.1、整型和浮点型字面值

整型字面值的具体数据类型,是要看他的数值大小和符号决定。一般情况下,十进制字面值时有符号数,具体是int,long还是long long类型则要根据数值大小确定,从最小的类型开始。二进制和八进制则既有可能是有符号类型也有可能是无符号类型,具体的数据类型也是需要根据数值大小来确定,从最小的内存大小的数据类型开始。

浮点数字面值一般是double类型,前面讲过,double是双精度,更加准确。

1.3.2、字符和字符串字面值

由单引号括起来的单个字符称为char型字面值。双引号括起来的零个或多个字符构成的字符串型字面值。

char a='A'; //字符字面值
char a[10]="abcdef"; //字符串字面值

字符串字面值的类型实际上就是多个字符组成的数组,每个字符串的末尾都会有一个空字符('\0‘)。所以说字符串的长度总是比实际长度多1。

1.3.3、转义序列

在编程中,有两类字符不能直接使用:一类是由于无法显示的图符,比如退格符,和其他控制符。还有一类就是c++中的转义字符。

c++转义序列
转义字符含义
\n换行符
\t横向置表符
\v纵向制表符
\b退格符
\a响铃
\\反斜线
\?问号
\r回车符
\f进纸符
\"双引号
\'单引号

 除了转义字符,用一些数字也是可以的,比如:\7(响铃),\12(换行符)等等。

1.3.4、指定字面值的类型

添加前缀或者后缀,也可以改变整型、浮点型和字符型字面值的默认类型。

前后缀类型
字符前缀(后缀)含义
L‘a’宽字符型字面值,类型时wchar_t
u8"hello,world!"utf-8字面值
10ULL无符号长整型
1E-3F单精度浮点型字面值,类型是float
3.1415926L扩展精度浮点型字面值

1.3.5、布尔字面值和指针字面值

true和false是布尔类型的字面值,而对于指针,在c++11版中,他的字面值是nullptr。这个放到后面介绍指针时详细介绍。

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

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

相关文章

学会shell 基本语法,玩转linux

01、获取当前时间&#xff0c;年月日时分秒 now$(date %Y%m%d%H%M%S) echo "$now" 输出为&#xff1a;20181202222727 02、date 在脚本中的几种用法 date %Y 以 4 位数字格式打印年份 date %y 以 2 位数字格式打印年份 date %m 月份 date %d 日期 date %H 小时 d…

IO模型和NGINX安装升级

IO模型和NGINX安装升级 IO模型 IO概念 I/O在计算机中指Input/Output&#xff0c; IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数)&#xff0c;是衡量磁盘性能的主要指标之一。 Linux的IO类型 磁盘I/O 磁盘I/O是进程向内核发起系统调用&#xff0c;请求磁…

抖店出单后怎么操作?谈厂家话术与发货注意事项,抖店最新教程

我是王路飞。 当你的抖店出单后&#xff0c;你是怎么操作的? 还是像之前那样去拼多多代拍发货&#xff1f;这样做的商家&#xff0c;不知道你的店铺被封了几个了&#xff1f; 记住&#xff0c;现在抖店出单后&#xff0c;一定不要再去多多拍单发货了&#xff01; 关于抖店…

0基础入门C++之类和对象下篇

目录 1.再谈构造函数1.1构造函数赋值1.2初始化列表1.3explicit关键字 2.static成员2.1概念2.1静态成员变量2.2静态成员函数2.3特性 3.匿名对象4.友元函数4.1友元函数4.2友元类 5.内部类6.再次理解类和对象 1.再谈构造函数 首先我们先来回忆一下构造函数&#xff1a; 构造函数是…

【springboot】springboot定时任务:

文章目录 一、文档&#xff1a;二、案例&#xff1a; 一、文档&#xff1a; 【cron表达式在线生成器】https://cron.qqe2.com/ 二、案例&#xff1a; EnableScheduling //开启任务调度package com.sky.task;import com.sky.entity.Orders; import com.sky.mapper.OrderMapper; …

CAN总线学习——物理层、数据链路层、CANopen协议

1、CAN总线介绍 1.1、CAN总线描述 (1)CAN总线支持多节点通信&#xff0c;但是节点不分区主从&#xff0c;也就是不存在一个节点来负责维护总线的通信&#xff1b;这点可以和I2C总线对对比&#xff0c;I2C是一主多从模式&#xff1b; (2)是差分、异步、串行总线&#xff0c;采用…

分布式—雪花算法生成ID

一、简介 1、雪花算法的组成&#xff1a; 由64个Bit(比特)位组成的long类型的数字 0 | 0000000000 0000000000 0000000000 000000000 | 00000 | 00000 | 000000000000 1个bit&#xff1a;符号位&#xff0c;始终为0。 41个bit&#xff1a;时间戳&#xff0c;精确到毫秒级别&a…

Python slice(切片)

在Python中&#xff0c;切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素&#xff0c;而切片取出序列中一个范围对应的元素&#xff0c;这里的范围不是狭义上的连续片段。 切片的基本语法为&#xff1a; object…

ChromeOS 的 Linux 操作系统和 Chrome 浏览器分离

导读科技媒体 Ars Technica 报道称&#xff0c;谷歌正在将 ChromeOS 的浏览器从操作系统中分离出来 —— 让它变得更像 Linux。虽然目前还没有任何官方消息&#xff0c;但这项变化可能会在本月的版本更新中推出。 据介绍&#xff0c;谷歌将该项目命名为 "Lacros"——…

防溺水预警识别系统算法

防溺水预警识别系统旨在通过opencvpython网络模型深度学习算法&#xff0c;防溺水预警识别系统算法实时监测河道环境&#xff0c;对学生等违规下水游泳等危险行为进行预警和提醒。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0…

strcat函数

目录 函数介绍&#xff1a; 函数声明&#xff1a; 具体使用&#xff1a; 注意事项&#xff1a; 字符串⾃⼰给⾃⼰追加&#xff0c;如何&#xff1f; 模拟实现strcat函数&#xff1a; 函数介绍&#xff1a; 被称为字符串的追加/链接函数&#xff0c;它的功能就是在一个字符…

gcc/linux下的c++异常实现

概述 本文不一定具有很好的说教性&#xff0c;仅作为自我学习的笔记。不妨可参阅国外大神博文C exceptions under the hood链接中包含了大量的例子。 偶有在对ELF做分析的时候看到如下图一些注释&#xff0c;部分关键字看不懂&#xff0c;比如什么FDE, unwind , __gxx_perso…

【技巧分享】如何获取子窗体选择了多少记录数?一招搞定!

Hi,大家好久不见。 我这个更新速度是不是太慢了呀&#xff0c;因为&#xff0c;最近又又又在忙&#xff0c;请大家谅解啦。 现在更新文章、视频都要花好久去考虑&#xff0c;好不容易有个灵感了&#xff0c;一搜索&#xff0c;结果发现之前都已经分享过了&#xff08;委屈脸&…

Nginx详解 第三部分:Nginx高级配置(附配置实例)

Part 3 一、网页的状态页二、Nginx第三方模块2.1 echo 模块 三、变量3.1 内置变量3.1.1 常用内置变量3.1.2 举个例子 3.2 自定义变量 四、自定义访问日志 (优化)4.1 自定义访问日志的格式4.2 自定义json 格式日志 五、Nginx压缩功能&#xff08;重要&#xff09;六、HTTPS 功能…

SMC_Interpolator2Dir反向插补运动

附加函数是&#xff1a; SMC_Interpolator2Dir_SlowTask 函数的位置&#xff1a; 输入&#xff1a; 运行 bExecute 【BOOL】 路径包 poqDataIn 指向SMC_OUTQUEUE的指针 停止 bSlow_Stop 停止BOOL 急停 bEmergency_Stop 紧急停止BOOL 单…

2023.8 - java - 多态

多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口&#xff0c;使用不同的实例而执行不同操作&#xff0c; 多态的优点 1. 可替换性2 可扩充性3. 接口性、灵活性、简化性4. 消除类型之间的耦合关系 多态存在的三个必要条件 继承重写父类引用指向子类…

Java“牵手”天猫商品历史价格信息API接口数据,天猫API接口申请指南

天猫平台商品历史价格接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、最低价、当前价格、价格信息等详细信息 。 获取商品历史价格接口API是一种用于获取电商平台…

如何运行imbalanced-streams-master工程?

1 下载和安装JDK和Eclipse 这个步骤网上的教程特别多&#xff0c;在此就不特别叙述了。 2 将imbalanced-streams-master工程解压并引入 2.1 解压 特别要注意的是&#xff1a;解压的文件夹和workspace一定不要在同一个目录。 解压后的目录结构如下&#xff1a; 2.2 import…

图片换脸-->>视频换脸-->>直播换脸

资源网站&#xff1a;https://tianfeng.space/ 个人娱乐&#xff0c;切勿作恶 下载 ​ 网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1DHMY1mCXpT0OtpmlvIoMKA 提取码&#xff1a;nf57 使用 下载解压后&#xff0c;打开 第一个就是你要替换的人脸&#xff0c;…

学习率调整策略

学习率是可以控制更新的步伐的。 我们在训练模型的时候&#xff0c;一般开始的时候学习率会比较大&#xff0c;这样可以以一个比较快的速度到达最优点的附近&#xff0c;然后再把学习率降下来&#xff0c; 缓慢的去收敛到最优值。学习率前期要大&#xff0c;后期要小 在学习学…