当前位置: 首页 > news >正文

C++学习笔记一: 变量和基本类型

        本章讲解C++内置的数据类型(如:字符、整型、浮点数等)和自定义数据类型的机制。下一章讲解C++标准库里面定义的更加复杂的数据类型,比如可变长字符串和向量等。

1.基本内置类型

        C++内置的基本类型包括:算术类型和空类型。算术类型值:字符、整型数、布尔值和浮点数;空类型对对应具体的值,仅用void表示用在一些特俗场合,比如函数不返回任何值时,就使用void作为返回类型。

1.1算术类型

        算术类型分类整型和浮点型。

        各算术类型在不同机器上表示的数字范围不一样,C++规定了最小取值范围,但最大没有规定。下面图表示各算术的类型的最小取值范围:

C++:算术类型
类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型64位
float单精度浮点数6位有效数字
double双精度浮点数10位有效数字
long double扩展精度浮点数10位有效数字

        其中:char的大小为一个字节,用于存放英语体系里面的任意字符;布尔类型的取值是真(true)或假(false);

内置类型的机器实现:

        计算机按照二进制序列连续存储数据,每个bit非0即1,例如:

        00001011110110101101011100001111......

        只有将连续的一段bit规定为一个单位,二进制数据才有意义。C++规定,一个字节至少要能容纳机器中基本字符的所有字符。所以,一个字节有8位bit组成,一个字由32或64位bit组成。

        由此,计算机中每8个bit使用1个地址,如下所示:

地址数据
736424 1      0     1     0     0     1     1     0
7364251     0     0     1     0     0     0    1
7364261     1     1     0    1     1     1     0
7364270      1     1     0     0     0     0    1

        数据类型决定了某个具体数据所占的比特数以及这些比特位上数字的含义。

        浮点型在C++中,被指定了最小有效位数,但是大多数编译器都实现了更高的精度。

1.2带符号类型和无符号类型

        除布尔型和扩展的字符型以外,其他整型可以划分为带符号(signed)和无符号(unsigned)的两种类型。带符号类型可以表示正数、负数或0;无符号类型仅能表示正数或0,写法如下:

        unsigned int、unsigned long、unsigned char。

        如果int、short、long和long long没有表示是否带符号,则默认是带有符号的,可以表示负数。

        注意:浮点型是不能用unsigned和signed修饰的。

        C++在类型的规定上有如此多的类型和规定,就是为了尽可能接近硬件,满足各种硬件的特性,所以显得有些繁杂。

注意:

        切勿混用带符号类型和无符号类型,否则发生错误,运算结果无意义。

1.3类型转换

        数据类型的的定义,决定了能包含的数据范围和运算。但是当代码中值与数据类型不匹配时,C++会进行自动数据类型转换。        

bool b = 42                // b为真
int i = b;                 // i的值为1
i = 3.14;                  // i的值为3
double pi = i;             // pi的值为3.0

        把非布尔值赋值给布尔类型,0表示false,非0表示true;

        把布尔值赋值给非布尔类型,false表示0,true表示1;

        浮点数赋值给整型,仅保留整数部分;

        整数赋值给浮点数,小数部分为0。如果整数过大,超过浮点类型容量,真数据失真;

1.4字面值常量

        每种数据类型的值,可以在程序中直接写出,被称作字面常量,比如:42。

        每个字面常量都对应一种数据类型,其形式和值决定了它的数据类型。

  • 整型和浮点型字面值

        数字可以是十进制、八进制、十六进制,为了区分这几种字面常量的不同,八进制和十六进制需要加前缀符号0和0X、0x,如下:

        20 十进制                       024 八进制                  0x24十六进制                       0X24十六进制

        数字的字面常量,C++会以数字的大小,找到最小限度能装下该字面常量的数据类型与之匹配。整型经常是int型,但int装不下时,可能是long型;浮点型经常默认是double型。

  • 字符和字符串字面值

        字符字面值由单引号括起来,且只能写一个字符,比如'C';

        字符串字面值由双引号括起来,里面可以写很多字符,本质上是由每一个字符所组成的数组,并以空字符('\0')表示结尾。所以,即使字符串里面只有一个字符,比如“C”,依然长度是两个字符,字符'C'和空字符。

        两个字符串字面值写在一起,哪怕中间有空白字符(空格符、缩进符、换行符),也被C++认为是一个字符串,所以当书写较长的字符串时,一行不合适,可以分为两个字符串放在两行。

  • 转义序列

        在字符串中,有两类字符不能直接使用,必须使用转义字符进行转义后才能使用。这两类字符是:

        1.不可打印的字符,如退格、换行、空格或其它控制字符,因为没有可视化的符号;

        2.在C++中有特殊含义的字符,如单引号、双引号、反斜杠、问号。

        C++中转义字符如下:

换行符                        \n问号                        \?
纵向制表符                \v进纸符                        \f
反斜杠                        \\报警符                        \a
回车                        \r双引号                        \"
横向制表符                \t单引号                        \'
退格符                        \b

        还有一种泛化的转义字符:格式1为:"\1到3个8进制数字";格式2为:“\x1到多个十六进制数字”,比如:

        \7 响铃        \12 换行符        \40 空格        \0 空字符        \115 字符M        \x4d 字符M

  • 指定字面值的类型

        通过给字面值加上指定前缀和后缀,可以强制规定字面值的数据类型;

字符和字符串字面值的前缀
前缀含义类型
uUnicode 16位字符chart16_t
UUnicode 32位字符chart32_t
L宽字符wchar_t
u8UTF-8(仅用于字符串字面常量)char
整型字面值的后缀
后缀最小匹配类型
u 或者 Uunsigned
l 或者 Llong
ll 或者 LLlong long
浮点型字面值的后缀
后缀类型
f 或者 Ffloat
l 或者 Llong double
  • 布尔字面值和指针字面值

        布尔类型的字面值是:true和false;

        指针字面值是:nullptr。

2.变量

        变量是一个有名称的、可供程序操作的存储空间。C++中的每个变量都有其数据类型,数据类型决定了变量所占内存空间的大小和布局方式、能存储的值的范围,以及变量能够参与的运算规则。

2.1变量的定义

        变量定义的基本格式是:

数据类型说明符 变量名1, 变量名2, 变量名3 ...... ;

int a = 0, b, c=0; // a 和 c初始化了,b仅仅只是定义了
  • 初始值

        当变量获取第一个值的时候,称为初始化。初始化的值可以是任意形式:字面值常量、表达式结果、函数返回值等。

        一条语句中初始化多个变量,前面的变量可以马上为后面的变量初始化。

double a = 0.1, b = a; // a 和 b的值都是0.1

注意:

初始化不是赋值,初始化的含义是创建变量时规定一个最初的值,而赋值是把变量当前的值擦除,用一个新的值代替。二者在内存中的操作动作不一样。

  • 列表初始化

        在C++ 11中引入,用花括号或括号初始化变量,如下都是正确的:

// 以下变量值都是0
int a = 0;
int b = {0};
int c{0};
int d(0);

其中,花括号的形式逐渐流行,无论初始化还是赋值,都可以使用花括号。

  • 默认初始化

        如果定义变量时没有初始化,则变量被默认初始化,给赋予默认值。如果在函数体的变量没有初始化,则默认为0;如果在函数体内,如果变量没有初始化且没有赋值,则该变量值不可控,所以函数体内的变量一定要初始化或赋值。

2.2变量声明和定义的关系

3.复合类型

4.const限定符

5.处理类型

6.自定义数据结构

相关文章:

C++学习笔记一: 变量和基本类型

本章讲解C内置的数据类型(如:字符、整型、浮点数等)和自定义数据类型的机制。下一章讲解C标准库里面定义的更加复杂的数据类型,比如可变长字符串和向量等。 1.基本内置类型 C内置的基本类型包括:算术类型和空类型。算…...

探索ClickHouse——同时支持导入导出功能的文件格式

在《探索ClickHouse——安装和测试》中,我们使用clickhouse直接从文件中读取数据。clickhouse支持多种格式文件的导入导出,本节我们对此进行分类介绍。 按常见格式区分 JSON 原始的JSON格式只支持导入,不支持导入。同时支持导入和导出的是…...

Scipy库提供了多种正态性检验和假设检验方法

Scipy库提供了多种正态性检验和假设检验方法。以下是一些常用的检验方法的列表: 正态性检验方法: Shapiro-Wilk检验:scipy.stats.shapiroAnderson-Darling检验:scipy.stats.andersonKolmogorov-Smirnov检验:scipy.st…...

去雨去雪去雾算法之本地与服务器的TensorBoard使用教程

在进行去雨去雾去雪算法实验时,需要注意几个参数设置,num_workers只能设置为0,否则会报各种稀奇古怪的错误。 本地使用TensorBoard 此外,发现生成的文件是events.out.tfevents格式的,查询了一番得知该文件是通过Tens…...

【小沐学前端】Node.js实现基于Protobuf协议的WebSocket通信

文章目录 1、简介1.1 Node1.2 WebSocket1.3 Protobuf 2、安装2.1 Node2.2 WebSocket2.2.1 nodejs-websocket2.2.2 ws 2.3 Protobuf 3、代码测试3.1 例子1:websocket(html)3.1.1 客户端:yxy_wsclient1.html3.1.2 客户端&#xff1a…...

MySQL学习笔记24

MySQL的物理备份: xtrabackup备份介绍: xtrabackup优缺点: 优点: 1、备份过程快速、可靠(因为是物理备份);直接拷贝物理文件。 2、支持增量备份,更为灵活; 3、备份…...

objective-c 基础学习

目录 第一节:OC 介绍 ​​第二节:Fundation 框架 ​第三节:NSLog 相对于print 的增强 ​第四节:NSString ​第五节:oc新增数据类型 第六节: 类和对象 ​类的方法的声明与实现 ​第七节:类…...

【精彩回顾】 用sCrypt在Bitcoin上构建智能合约

2023年3月24日,sCrypt在英国Exeter大学举办了关于智能合约的大学讲学。sCrypt首席执行官刘晓晖做了题为“用sCrypt在Bitcoin上构建智能合约”的演讲,并与到场的老师、学生进行了深入交流、互动。这次课程着重讲解了 BSV 智能合约的基础概念,以…...

Kotlin 使用泛型

在 Kotlin 中,我们可以使用泛型(Generics)来编写具有通用性的代码,以增强代码的可重用性和类型安全性。通过使用泛型,我们可以在不指定具体类型的情况下编写适用于多种类型的函数和类。 以下是 Kotlin 中使用泛型的几…...

深度学习 二:COVID 19 Cases Prediction (Regression)

Deep Learning 1. 回归算法思路2. 代码2.1 基础操作2.2 定义相关函数2.3.1 定义图像绘制函数2.3.2 数据集加载及预处理2.3.3 构造数据加载器2.3.4 构建前馈神经网络(Feedforward Neural Network)模型2.3.5 神经网络的训练过程2.3.6 模型评估2.3.7 模型测…...

UG\NX二次开发 信息窗口的4种输出方式 NXOpen::ListingWindow::DeviceType

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 简介 UG\NX二次开发 信息窗口的4种输出方式 NXOpen::ListingWindow::DeviceType 信息窗口的输出类型 enum NXOpen::ListingWindow::DeviceType 枚举值描述 DeviceTypeWindow0输出将写入“信息”窗口DeviceTypeFile1输出…...

mavn打包时如何把外部依赖加进去?

一、添加依赖: <dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver</artifactId><version>18</version><scope>system</scope><systemPath>${project.basedir}/lib/DmJdbcDriver18.jar</systemP…...

爬虫代理请求转换selenium添加带有账密的socks5代理

爬虫代理请求转换selenium添加带有账密的socks5代理。 一、安装三方库 二、使用方法 1、在cmd命令行输入&#xff1a; 2、给selenium添加代理 最近因为工作需要&#xff0c;需要selenium添加带有账密的socks5代理&#xff0c;贴出一个可用的方法。 把带有账密的socks5代理&am…...

Redis 如何实现数据不丢失的?

Redis 实现数据不丢失的关键在于使用了多种持久化机制,以确保数据在内存和磁盘之间的持久性。以下是 Redis 实现数据不丢失的主要方法: 快照(Snapshot)持久化: Redis 使用快照持久化来定期将内存中的数据写入磁盘。快照是一个数据库状态的副本,包含了所有键和与其相关联的…...

[高等数学]同济版高等数学【第七版】上下册教材+习题全解PDF

laiyuan 「高等数学 第7版 同济大学」 https://www.aliyundrive.com/s/5fpFJb3asYk 提取码: 61ao 通过百度网盘分享的文件&#xff1a;同济版高数教材及… 链接:https://pan.baidu.com/s/1gyy-GMGjwguAjYijrpC8RA?pwdyhnr 提取码:yhnr 高等数学相关&#xff1a; The Ca…...

【面试题精讲】Java超过long类型的数据如何表示

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 在 Java 中&#xff0c;如果需要表示超过 long 类型范围的数据&#xff0c;可以使用 BigInteger 类…...

Shapiro-Wilk正态性检验(Shapiro和Wilk于1965年提出)

Shapiro-Wilk正态性检验是一种用于确定数据集是否服从正态分布的统计方法。它基于Shapiro和Wilk于1965年提出的检验统计量。以下是其基本原理和用途&#xff1a; 基本原理&#xff1a; 零假设&#xff08;Null Hypothesis&#xff09;&#xff1a;Shapiro-Wilk检验的零假设是数…...

debian设置允许ssh连接

解决新debian系统安装后不能通过ssh连接的问题。 默认情况下&#xff0c;Debian系统不开启SSH远程登录&#xff0c;需要手动安装SSH软件包并设置开机启动。 > 设置允许root登录传送门&#xff1a;debian设置允许root登录 首先检查/etc/ssh/sshd_config文件是否存在。 注意…...

【C语言经典100例题-66】(用指针解决)输入3个数a,b,c,按大小顺序输出。

代码&#xff1a; #include<stdio.h> #define _CRT_SECURE_NO_WARNINGS 1//VS编译器使用scanf函数时会报错&#xff0c;所以添加宏定义 swap(p1, p2) int* p1, * p2; {int p;p *p1;*p1 *p2;*p2 p; } int main() {int n1, n2, n3;int* pointer1, * pointer2, * point…...

【STM32 CubeMX】移植u8g2(一次成功)

文章目录 前言一、下载u8g2源文件二、复制和更改文件2.1 复制文件2.2 修改文件u8g2_d_setup文件u8g2_d_memory 三、编写oled.c和oled.h文件3.1 CubeMX配置I2C3.2 编写文件oled.holed.c 四、测试代码main函数测试代码 总结 前言 在本文中&#xff0c;我们将介绍如何在STM32上成…...

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合&#xff0c;企业应用服务平台&#xff08;PaaS&#xff09;已从幕后走向台前&#xff0c;成为推动行业数字化转型的关键力量。此背景下&#xff0c;华为云PaaS智能化组装式交付方案闪耀全场&#xff0c;在近日结束的华为全联接大会 2023上倍受…...

Halcon Image相关算子(二)

(1) dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 功能&#xff1a;从输入图像中选择像素满足阈值条件的那些区域。 图形输入参数&#xff1a;OrigImage&#xff1a;原始图像&#xff1b; 图形输入参数&#xff1a;ThresholdImage&a…...

Rust 多线程编程

一个进程一定有一个主线程&#xff0c;主线程之外创建出来的线程称为子线程 多线程编程&#xff0c;其实就是在主线程之外创建子线程&#xff0c;让子线程和主线程并发运行&#xff0c;完成各自的任务。 Rust语言支持多线程编程。 Rust语言标准库中的 std::thread 模块用于多线…...

JavaScript高阶班之ES6 → ES11(八)

JavaScript高阶班之ES6 → ES11 1、ES6新特性1.1、let 关键字1.2、const关键字1.3、变量的解构赋值1.3.1、数组的解构赋值1.3.2、对象的解构赋值 1.4、模板字符串1.5、简化对象写法1.6、箭头函数1.7、函数参数默认值1.8、rest参数1.9、spread扩展运算符1.9.1、数组合并1.9.2、数…...

网页中嵌套网页制作方法

<!DOCTYPE html> <html> <head> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta charset"UTF-8"> <title>网页搜索</title> <style> body { ba…...

系统集成项目管理总结(笔记)

系统集成项目管理总结 基础知识 第一章 信息化知识 第二章 信息系统服务管理 第三章 系统集成专业技术 第四章 项目管理一般知识 第五章 立项管理 第六章 整体管理 第七章 范围管理 第八章 进度管理 第九章 成本管理 第十章 质量管理 第十一章 人力资源管理 第十二…...

如何给Nginx配置访问IP白名单

一、Nginx配置访问IP白名单 有时部署的应用需要只允许某些特定的IP能够访问&#xff0c;其他IP不允许访问&#xff0c;这时&#xff0c;就要设置访问白名单&#xff1b; 设置访问白名单有多种方式&#xff1a; 1.通过网络防火墙配置&#xff0c;例如阿里云/华为云管理平台 2.…...

【VIM】VIM配合使用的工具

6-1 课程总结-vim虐我千百遍&#xff0c;我待 vim 如初恋_哔哩哔哩_bilibili...

git你学“废”了吗?——git本地仓库的创建

git你学“废”了吗&#xff1f;——git本地仓库的创建&#x1f60e; 前言&#x1f64c;初识gitgit 本地仓库的创建1、基于centos7环境下 git的下载2、设置自己的用户名和邮箱 查看.git中的结构区分清楚版本库和工作区 查看git中的相关内容查看仓库的状态 总结撒花&#x1f49e;…...

AWS Lambda Golang HelloWorld 快速入门

操作步骤 以下测试基于 WSL2 Ubuntu 22.04 环境 # 下载最新 golang wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz# 解压 tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz# 配置环境变量 PATH echo export PATH$PATH:~/.local/go/bin >> ~/.bashrc …...

企业做网站的费用/推广平台网站

源&#xff1a;JNA调用DLL 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA。 JNA(Java Native Access)框架是一个开源的Java框架&#xff0c;是SUN公司主导开发的&#xff0c;建立在经典的JNI的基础之上的一个框架。 JNA项目地址&#xff1a;https://jna.dev.java.net/…...

王爷你的王妃有毒全文免费阅读/乐天seo培训

如果你从Python解释器中退出&#xff0c;并且再次进入&#xff0c;你会发现你以前定义的函数和变量都已经丢失了。所以&#xff0c;如果你想写一个在某种程度上更长的程序&#xff0c;使用一个文本编辑器来准备解释器的输入会使情况有所好转&#xff0c;并且使用文件代替输入来…...

网站开发主流语言/爱站网关键词挖掘工具站长工具

使用场景&#xff1a;服务器数据不符合测试条件时&#xff0c;我们可以通过在本地创建虚拟数据来打到测试用例所描述的条件。 fiddler使用方法 1、首先在本地创建txt数据&#xff1a;将抓到的response中的json数据拷贝到记事本&#xff0c;我们根据需要进行修改&#xff0c;然后…...

59网站一起做网店普宁/泉州百度关键词排名

下载json、csv、excel、img等文件&#xff0c;而不是直接在浏览器打开&#xff0c;在后台管理系统中很常见。那么都有哪些方式可以实现呢&#xff1f; 方式一&#xff1a;链接&#xff0c;参数不多 1. a标签&#xff0c;直接实现 // href 放下载地址; // download 为空&#x…...

宽带办理需要多少钱/seo咨询茂名

前面发布了很多种二维的曲线图形,其实所有的二维图形再加一个维度值就可以变成三维图形.那么这一节的内容是将一个二维曲线帖到一个球面上,以生成三维曲线. 帖到球上的方式是以如下公式生成第三个维度的数值: y sqrt(a*a - x*x - z*z) 这里举个例子是之前发的一种二维曲线: 数…...

wordpress媒体库查看404/seo工具查询

1、创建一个svn的仓库&#xff1a;E:\> svnadmin create svn_server2、迁出svn仓库&#xff1a;D:\> svn co file:///e:/svn_server svn_client3、设置svnignore创建一个svnignore文件用于统一管理ignore选项&#xff0c;这里仅添加一行&#xff1a;*.class&#xff0c;用…...