C++基础学习

C++ 基础

目录

C++ 基础

变量

常量

字面量

符号常量-具有名称的常量

数据类型

基本类型

关系与逻辑

关系表达式

运算符优先级

变量

计算机的内存

变量指的是会随着程序运算而改变的量。 Tips: 比如用户在售卖机购买的可乐数量和爆米花数量都是不确定的,最后的总价也会各异,所以这些数量和总价都以变量的形式存在于计算机中。维护这些变量会用到计算机的存储功能

  • 计算机的存储功能会使用内存实现。

  • 计算机中的操作系统一般会把内存划分成不同区域来存储数据,以便于管理。

  • 内存中每个基本存储单元可以存放一个字节的数据,每个字节具有8位,也就是8个比特(bit)。

  • 每个内存单元有一个唯一的地址,常用一个16进制数表示和区分。

变量的声明

  • 变量的声明就是向内存申请变量,用于存放数据的过程,一般的声明方式为数据类型 变量名称

// 声明可乐数量变量 coke
int coke;
// 声明爆米花数量变量 popcorn
int popcorn;
// 声明消费总额变量 money
int money;

变量的命名规则

变量名称也叫做标识符,有固定的构造规则

  • 只能由字⺟、数字和下划线组成;

  • 数字不可以出现在第一个位置上

  • C++的关键字(保留字)不可以⽤做标识符

  • 最好简单易懂,用具有对应含义的英文或者拼音来表示;

标识符是用于表示以下内容之一的字符序列:

  • 对象或变量名称

  • 类、结构或联合名称

  • 枚举类型名称

  • 类、结构、联合或枚举的成员

  • 函数或类成员函数

  • typedef 名称

  • 标签名称

  • 宏名称

  • 宏参数

关键字

alignas alignof and and_eq asm auto bitand bitor bool break case catch char char8_t char16_t char32_t class compl concept const const_cast consteval constexpr

constinit continue co_await co_return co_yield decltype default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline

int long mutable namespace new noexcept not not_eq nullptr operator or or_eq private protected public register reinterpret_cast requires return short signed sizeof static static_assert

static_cast struct switch template this thread_local throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq

变量的初始化

  • 在声明变量时,也可以赋予这个变量一个初值,这被称为变量的初始化

// 声明消费总额变量 money,并且初始化数值为 0
int money = 0;

变量的输出

  • 使用C++代码来在屏幕上展示初始化过的的消费总额,这叫做变量的输出,输出的内容是变量中保存的数值,而不是变量名称。

//将初始化好的消费总额打印在屏幕上,并且进行换行
cout << money << endl;
// 导入系统输入输出头文件 iostream
#include <iostream>
​
// 使用标准命名空间 std
using namespace std;
​
int main() {
    // 声明可乐数量变量 coke
    int coke;
    // 声明爆米花数量变量 popcorn
    int popcorn;
    // 声明消费总额变量 money,并且初始化数值为 0
    int money = 0;
    
    // 将初始化好的消费总额打印在屏幕上,并且进行换行
    cout << money << endl;
    
    return 0;
}

常量

字面量

数学计算关联最紧密的两类字面量——整数字面量浮点字面量

  • 整数字面量

    是没有任何小数或指数部分的数字字面量,与数学中的整数直接关联。

    • 十进制:直接写出的整数。

      例如:023-1024

    • 八进制:以数字0开头的整数,有效数字为0~7,并且不带有正负号。

      例如:01260163

    • 十六进制:以0x0X开头的整数,有效数字为0~9A~Fa~f),并且不带有正负号。

      例如:0x12a0xf39

  • 浮点字面量

    是有分数形式或指数形式的数字字面量,与数学中的小数直接关联。

    • 小数形式:由数字和小数点组成

      例如:0.6630.014.15926

    • 指数形式:在数学中,一个可以用幂的形式来表示的形式。在C语言中,则以eE后跟一个整数来表示以10为底数的幂数。

      • eE的左侧必须要有数字

      • eE的右侧为幂次的数值,必须为整数

      • 上述小数可以等价表示为:6.6E-130.0e00.01415926E3

  • 字符字面量-表达字符的常量

    不同于直接参与计算的整数与浮点字面量,常量中还有一类主要用来表达常见字符的常量,分为单字符字面量转义符字面量

    • 单字符字面量

      通过将单个字符括在单引号内来创建字符字面量

      例如:'a''m''F''2''}'等。

    • 转义符字面量

      使用''开头的转义字符序列来表示一个特殊字符。

    转义字符

    Tips:有时,在C++编程中必须使用不能键入或具有特殊含义的字符。例如,换行符(回车),制表符,问号,引号等。为了使用这些字符,就会使用''开头的转义字符序列用来表示一个特殊字符。

    例如:

       `'\n'`表示换行符;
    ​
       `'\t'`表示制表符; 
    ​
       `'\''`表示单引号字符(不被解析成字符外的单引号);
    ​
       `'\\'`表示真正的斜杠字符。

    ASCII编码

    所有的字符字面量在计算机里都是有一个编码的,为了避免大家用不同的编码,造成混乱,美国的组织就出台了ASCII编码(American Standard Code for Information Interchange:美国信息交换标准代码),所有字符都采用ASCII编码,共有128个字符。每个字符都对应着一个0~127之间的整数。

    下面两个表格中,深灰色的列就是其右侧字符对应的ASCII编码,你可以大致浏览一下,不需要强行记忆。

    字符串字面量-构成输出的常量

    回顾我们在学习C++时会编写的第一个程序,就是用来输出Hello, World!这句话。

    #include <iostream>
    using namespace std;
    int main() {
        cout << "Hello, World!" << endl;
        return 0;
    }

    可以看到Hello, World!被一对双引号""包围,这一个整体就是一个字符串字面量。

    • 字符串字面量是由一对双引号括起来的字符序列

    • 字符串中可以包含类似于字符字面量普通字符以及转义字符

    • 字符串除了存储所包含的字符外,还额外包含一个结束标志'\0'

      '\0':结束符; ASCII编码对应数值为0的字符

    练习

    请使用转义字符打印一个3行4列的星号长方形:

    ****
    ****
    ****

    参考代码:

    #include<iostream> 
    using namespace std; 
    int main() { 
        // 每行都输出4个*和一个换行符
        cout << "****\n" ;
        cout << "****\n" ;
        cout << "****\n" ;
        return 0;
    } 

    符号常量-具有名称的常量

    • 在C++中,随着程序运算不改变的量叫做符号常量,可以使用const关键字来定义并且初始化:

    const int kCokePrice = 5;
    const int kPopcornPrice = 10;
    • const是⼀个修饰符,加在数据类型int的前⾯,用来给这个变量加上一个不变的属性

      • 初始化时也可以将修饰符const与数据类型int调换位置,写成int const kCokePrice = 5;

    • 符号常量命名时参照Google 开源项目风格指南,以 “k” 开头,大小写混合

      • 实际编程过程中的名字最好简单易懂,用具有对应含义的英文或者拼音来表示

    • 定义的时候必须进行初始化,且在初始化之后不能再进行修改与重新赋值

      • 如果试图对常量做修改,例如把它放在赋值符号的左边,就会被编译器发现并指出错误

    最后,总结一下符号常量的初始化伪代码:

    const 数据类型 常量名称 = 初始值;

    或者

    数据类型 const 常量名称 = 初始值;

数据类型

在C++的变量声明中,变量名之前需要指定数据类型

数据类型 变量名称;

数据类型将会决定一个变量存储什么样的信息,从而决定变量的容量**有多大,在内存中需要分配多大的空间。

基本类型

整数类型

数值整数类型

  • 数值整数用来表示没有小数部分的数字。

    • 数值整数可以按照占用内存大小分类

      • shortintlong以及long long,占用内存越大的类型能表示的数值范围就更大。

      • shortintlong以及long long这四种数值整数类型占用的字节数递增,所以能表示的整数范围也递增。

        • short类型至少占据2个字节,即16位;一般占用2字节;

        • int在现代系统中一般占用4个字节,即32位;类型长度大于等于short类型;

        • long类型长度至少占据4个字节,且大于等于int类型;一般占用4个字节;

        • long long类型长度至少占据8个字节,且大于等于long类型;一般占用8个字节。

          超过范围将无法正常表示

    • 同时又可以按照是否表示负值

      • 分为有符号版本和无符号版本

        比如:

        • unsigned int就表示无符号的int类型,只能表示正值;

        • signed int就表示有符号的int类型,可以表示负值。

        • 在不指定有无符号时,都默认是有符号版本。

      • 表示

        • 如果是无符号版本,那么一个8位的内存块可以一一对应到0~255之间的整数;

        • 如果是有符号版本,那么就会考虑负数,这个8位的内存块可以表示一128~127之间的整数。

        • 默认状态下short等四个整数类型都是符号类型,这使得它们能够表示的最大数值减小了一半左右。

        • 在确定变量的数值不会是负数的情况下,我们可以利用unsigned关键字,加在原有数据类型之前,创建无符号的整数类型。

字符类型

  • 字符类型则专门用来存储计算机中的基本符号:英文字母、数字以及标点等。

计算机通过ASCII编码,将128个字符映射到对应数字上,于是我们使用一个字节(8位)就可以将所有的字符表示出来。通过查看内存,可以发现储存在类型为char的变量中的实际上是一个整数,对应于这个字符的ASCII编码值。

所以,我们可以既可以使用字符常量,也可以使用字符对应的ASCII编码,来给char类型的变量赋值。

// 用字符常量初始化一个 char 类型
char size_1 = 'L';
// 用整数常量初始化一个 char 类型,字符L的ASCII编码值为76
char size_2 = 76;

字符整数类型虽然存储方式和数值整数类型相似,都是存放一个数值,但是在输出显示时是不同的。

我们可以通过以下代码来观察数值整数类型和字符整数类型的区别:

// 初始化一个 int 类型
int length = 76; 
// 用字符常量初始化一个 char 类型
char size_1 = 'L';
// 用整数常量初始化一个 char 类型,字符L的ASCII编码值为76
char size_2 = 76;
​
cout << "衣服的长度为:" << length << "厘米。\n";
cout << "衣服的大小为:" << size_1 << "号。\n";
cout << "衣服的大小为:" << size_2 << "号。\n"; 
//cout识别到了size_1和size_2是字符类型变量,从而在输出时自动进行了转换,把数字转成了该编码对应的字符。

可以看到,程序的输出为:

衣服的长度为:76厘米。
衣服的大小为:L号。
衣服的大小为:L号。

浮点类型

表示精度

学习了C++中的各种整数类型,我们继续来看基本类型中的第二大块:浮点类型。

  • 计算机用浮点数表示两类数:

    • 小数部分的数字; 例如:圆周率3.14、黄金分割比例0.618等,这些数字在整数之间

    • 数值非常的数字。 例如:宇宙中原子个数约10的80次方,这个数字已经无法被long long整型表示

  • C++中的浮点数分为三种类型:floatdouble以及long double,分别表示不同的精度

  • 浮点数的精度在于它可以表示的有效位数以及指数范围

    • 指数范围指的是可以表示的指数幂次大小;

由于浮点数更多的应用是用来表示带小数的数字,所以我们主要从有效位数的角度讲解精度。

  • 有效位数用来描述浮点数值的刻画精确程度

    例如:3.14的有效位数是3位,3.1415926的有效位数是8位。

Tips: 需要注意的是,有效位数不会因为小数点的改变而改变,无论314000或者3.14000,它们的有效位数都是3位,多出来0可以看作是一种占位符,因为实际有意义的数字只有3个:3、1和4。

  • 在三种浮点类型中,更大的内存空间可以表示更多的有效位数:

    • float类型通常占用4个字节,有效位数为6位

    • double类型占用的空间是float类型的两倍,即8个字节,有效位数为15位

    • long double类型一般占用16个字节的空间

关系与逻辑

关系表达式

  • 在C++中,关系运算符用于判断表达式之间的大小关系,对两边的值进行6种情况的判断:

    • 大于>和大于等于>=运算符

    • 小于<和小于等于<=运算符

    • 相等==和不相等!=运算符

  • 关系运算符中,表达式结果的类型可以是字符或者数字,但不可以是字符串

  • 关系表达式返回一个布尔值:成立为1(true)代表真,不成立为0(false)代表假

Tips:判断两个数是否相等,用的是==而非=,因为=是用于赋值操作的。

  • 浮点数

    一般不会用==或者!=来判断,因为可能产生表示误差

    比较两个浮点数是否相等,需要看两个数的差值是否小于一定的精度,比如:

    • 对于浮点数ab,如果(a - b) < 1e-6 如果值为真,就判断两个浮点数相等。

运算符优先级

  • 至此,我们已经学习的运算符如下:

    • 算术运算符(+ - * / % ++ --等)

    • 赋值运算符(=等)

    • 位运算符(<< >>等)

    • 关系运算符(> >= < <= == !=等)

    • 逻辑运算符(&& || !等)

  • 对于这些常用的运算符,按照计算优先级从高到低(左边更高,右边更低)进行排列,可以得到如下表格:

Tips:对于一个表达式,虽然可以通过计算优先级省略掉括号,但为了代码的可读性,我们在编写时一般都选择把括号加上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值