C++学习笔记二--数据类型、运算符和表达式

简介

        这篇文章介绍的是C++中的数据类型、运算符和表达式。

        C++中的每一个常量或者是变量都有一个数据类型。常见的数据类型分成3类:基本类型、导出类型、用户定义类型。

1.C++中的数据类型

        这里进介绍基本数据类型和基本数据类型的派生类型。

1.基本类型

1.字符型

        字符型使用关键字char表示,因此称为char型。字符型的取值范围是全部基本字符以及ASCII码集或者扩充ASCII码集对应的全部符号。字符型数据占用一个字节。字符集和单字节证书是根据ASCII码对应的。因此可以把字符看成用来表示单字节整数的类型。字符和ASCII值的对应关系如下表:

字符ASCII 值
A65
B66
C67
......
a97
b98
c99
......
048
149
250
......
空格32
换行10

        我们可以调用static_cast函数获取字符串对应的ASCII值。我们可以调用下面的代码打印出字符对应的ASCII值。

        在 C++ 中,你可以使用 <limits> 头文件中的 std::numeric_limits 模板来获取有符号字符类型的最大值和最小值。这个模板提供了一个 min() 方法和一个 max() 方法,用于获取给定类型的最小值和最大值。

        有符号字符型取值范围为-128-127。

        无符号字符型取值范围为0~255.

        我们可以使用下面的代码打印出字符对应的ASCII码以及无符号和有符号字符的最大值和最小值。

#include <iostream>
using namespace std;

int main() {
    // 打印小写字母的 ASCII 编码
    cout << "小写字符对应的 ASCII 值:" << endl;
    for (char ch = 'a'; ch <= 'z'; ++ch) {
        cout << ch << ": " << static_cast<int>(ch) << endl;
    }

    // 打印大写字母的 ASCII 编码
    cout << "\n大写字符对应的ASCII值:" << endl;
    for (char ch = 'A'; ch <= 'Z'; ++ch) {
        cout << ch << ": " << static_cast<int>(ch) << endl;
    }
    char space = ' ';
    cout << "空格对应的ASCII: " << static_cast<int>(space)<< endl;
    cout << "空格对应的ASCII: " << static_cast<int>('\n') << endl;

    // 有符号字符的最小值和最大值
    std::cout << "有符号字符的最小值: " << static_cast<int>(std::numeric_limits<signed char>::min()) << std::endl;
    std::cout << "有符号字符的最大值: " << static_cast<int>(std::numeric_limits<signed char>::max()) << std::endl;

    // 无符号字符的最小值和最大值
    std::cout << "无符号字符的最小值: " << static_cast<int>(std::numeric_limits<unsigned char>::min()) << std::endl;
    std::cout << "无符号字符的最小值: " << static_cast<int>(std::numeric_limits<unsigned char>::max()) << std::endl;
    
    return 0;
}

        控制台的打印信息为:

小写字符对应的 ASCII 值:

a: 97

b: 98

c: 99

d: 100

e: 101

f: 102

g: 103

h: 104

i: 105

j: 106

k: 107

l: 108

m: 109

n: 110

o: 111

p: 112

q: 113

r: 114

s: 115

t: 116

u: 117

v: 118

w: 119

x: 120

y: 121

z: 122

大写字符对应的ASCII值:

A: 65

B: 66

C: 67

D: 68

E: 69

F: 70

G: 71

H: 72

I: 73

J: 74

K: 75

L: 76

M: 77

N: 78

O: 79

P: 80

Q: 81

R: 82

S: 83

T: 84

U: 85

V: 86

W: 87

X: 88

Y: 89

Z: 90

空格对应的ASCII: 32

空格对应的ASCII: 10

有符号字符的最小值: -128

有符号字符的最大值: 127

无符号字符的最小值: 0

无符号字符的最小值: 255

2.逻辑型

        逻辑型使用关键字bool关键字表示,也称为布尔型。逻辑型只有两个值:true和false。

        true对应整数1,表示为真。

        false对应整数0,表示为假。

3.整型

        整型使用关键字int表示。整型数据所占据的存储空间大小根据机器的不同而不同。

4.浮点型

        浮点类型包括单精度浮点型和双精度浮点型。

        单精度浮点型使用float关键字表示,又称为float型,取值范围为-3.4E38~3.4E38,但不能超过7位有效数字。

        双精度浮点型使用double关键字表示,又称为double型,取值范围为-1.7977E308~1.7977E308,但不能超过15位有效数字。

5.空值类型

        空值型使用关键字void表示,因此成为void型。

2.基本类型的派生类型

        基本数据的字长及其取值范围可以放大和缩小,改变后的类型就叫做基本数据类型的派生类型。

        派生类型声明符由基本数据类型和基本类型的派生类型修饰符组成。

        类型修饰符包括:short long signed unsigned。

2.常量

1.逻辑常量

2.字符常量

        字符常量使用单引号中间加一个字符组成。

        转义字符也属于字符常量。

        字符串常量使用双引号加字符组成。

3.整型常量

1.十进制整型

        以+或者-开头,开头为非0的一串字符串组成。

        例如:11、23。

2.八进制整型

        以数字0开头。默认为整数。

        例如:0123

3.十六进制整型

        以0x开头。

         例如:0x9A。

4.实数

        实数包括十进制的定点和浮点数。

1.定点数

        十进制的定点数称为定点数,以小数的形式表示实数。

        例如:123、123.45、-123.1、-199.123。

2.浮点数

        在C++中,实型常量是指浮点数常量,包括单精度浮点数、双精度浮点数和长双精度浮点数。实型常量可以表示小数或科学计数法表示的数字。

1.单精度浮点数常量

        单精度浮点数常量以f 或F 结尾。

        单精度浮点型常量占用4个字节,提供7位有效数字。

float f1 = 3.14f;
float f2 = 1.5F;
2.双精度浮点数常量

        双精度浮点数常量没有后缀,或以 d 或 D 结尾。

        双精度浮点型常量占用8个字节,提供15位有效数字。

double d1 = 3.14;
double d2 = 2.71828d;
double d3 = 6.022e23;  // 科学计数法表示
3.长双精度浮点数常量

        长双精度浮点数常量以 l 或 L 结尾。

        long double精度浮点型常量占用10个字节,提供19位有效数字。

long double ld1 = 3.14l;
long double ld2 = 1.23456789L;

5.枚举常量

        枚举常量是枚举类型中定义的值,也被成为枚举值。

         声明格式如下:   

   enum 类型名{枚举值列表};

        例如我们可以定义水果的枚举值:

enum fruit{

        apple,

        orange =2,

        watermelon

}

        如果第i个枚举值赋值给常量么,后续的枚举值为m+1,m+2...直到下一个赋了值的枚举值或者结束。

        例如在上面的例子中,watermelon值为3,apple值为0.

3.变量

1.变量的定义

        变量声明语法格式如下:

[存储类] 类型名 变量名 [= 初始表达式];

        存储类有四种:aotu、register、static、extern,默认值位auto。可以省略这个存储类(按照auto处理)。

        类型名可以是基本数据类型如int、float、double、bool、chart等,也可以是用户定义的类型。

        初值表达式是一个表达式,可以省略。

        实例代码如下:

int result =10;

2.变量的使用方式

1.全局变量和局部变量

        全局变量是在所有函数定义、类定义和程序块之外声明的变量。未进行专门初始化的全局变量会被系统自动初始化为0。全局变量的作用范围是从定义变量的位置开始知道整个程序的结束。

        局部变量是在某个函数定义、类定义和程序块之内声明的变量。局部变量只能在声明它的函数、类或程序块中被访问。

2.生存期与作用域

        全局变量的生存期是从声明开始直到程序结束。

        局部变量的生存期是从声明开始,知道包含此变量的最近的一个程序块结束。

3.变量的存储类属性

1.auto

        自动变量。

        默认存储类别。占用存储空间的分配和释放工作由系统自动完成。

2.register

        寄存器变量。可能以寄存器作为其存储空间,寄存器不够用的时候,按照auto变量处理。

3.static

        静态变量。一直到程序结束生存期才终止。

4.extern

        外部变量。

4.typedef类型说明

        使用关键字typedef可以将已有类型定义为新类型名。格式如下:

typedef 已有类型 新类型名

        例如:

typedef int INT;

typedef double R;

typedef short SHORT;

type float FLOAT;

3.符号常量声明语句

1.符号常量的声明

2.使用#define定义符号常量

4.运算符和表达式

1.运算符和表达式的概念

        在C++中,运算符(operators)是用于执行特定操作的符号或关键字。表达式(expressions)是由运算符、操作数和其他表达式组成的组合,它们用于计算某个值。

        按照运算分量个数的多少可以将运算符分成单目运算符、双目运算符、三目运算符。

2.赋值运算

1.赋值表达式

赋值表达式的格式如下:

变量名 = 表达式;

        例如:

int a;

a= 10;    

2.特殊类型的赋值

        将实数赋值的时候,将会丢失小数部分。

        例如在下面的例子中,a = 1;

int a = 4/3;

        可以使用赋值类型给多个变量赋值:

x = y =4;

       C++中赋值运算符的顺序是从右到左。        

3.算数运算符和算数表达式

1.单目运算符

        -:单减运算符

        ++:增量运算符

        --:减量运算符

b = a++;等价于b=a;a =a +1;

b =++a;等价于a = a+ 1;b = a;        

2.双目运算符

        +:加

        -:减

        *:乘

        /:除

        %:取余

3.三目运算符

a<<b?c:d;

4.关系运算符和关系表达式

        <、>、=、》=、<=、!=、==

5.逻辑运算符和逻辑表达式

       !非

        &&:且

        ||:或

6.位运算

        &:按位与运算
        |:按位或运算
        ^:按位亦或运算
        >>:右移运算符
        <<:左移运算符
        ~:取反运算符

7.其它运算

1.条件运算符

a>b?1:0; //表达式为1

2.逗号运算符

        从左到右运算,返回最后一个表达式的值

a = (3+4,5+7,2+1);//a=3

a = 3*3,a+6,a+7;//a=16

3.sizeof运算符

        返回运算符在内存中占用的字节数。

8.运算符和结合性

        在C++中,运算符的优先级确定了它们在表达式中被执行的顺序。当一个表达式中包含多个运算符时,优先级决定了哪些运算符会先被执行,哪些会后执行。以下是C++中一些常见运算符的优先级,按照从高到低的顺序排列:

1. **括号**:`()`(括号中的表达式具有最高优先级)。

2. **成员选择和指针成员选择**:`->`、`.`。

3. **后缀递增/递减**:`++`、`--`。

4. **前缀递增/递减**:`++`、`--`。

5. **一元运算符**:`+`(正)、`-`(负)、`!`(逻辑非)、`~`(按位取反)、`*`(指针取值)、`&`(取地址)、`sizeof`、`typeid` 等。

6. **乘法和除法**:`*`、`/`、`%`。

7. **加法和减法**:`+`、`-`。

8. **移位运算符**:`<<`、`>>`。

9. **关系运算符**:`<`、`<=`、`>`、`>=`。

10. **相等性运算符**:`==`、`!=`。

11. **按位与**:`&`。

12. **按位异或**:`^`。

13. **按位或**:`|`。

14. **逻辑与**:`&&`。

15. **逻辑或**:`||`。

16. **条件运算符**:`?:`。

17. **赋值运算符**:`=`, `+=`, `-=`, `*=`, `/=`, `%=` 等。

18. **逗号运算符**:`,`(具有最低优先级,在表达式中从左到右依次执行)。

当表达式中存在多个运算符时,按照优先级从高到低的顺序依次执行。在表达式中使用括号可以改变运算符的执行顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫柱子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值