【C++基础】02 数据类型基础与运算

1 变量

image-20250825163704510

1.1 整型(int)

注意:C++,int类型自动向下取整,自动类型转换可能会导致数据丢失

整数,例如 10 ,2 ,0, -996

大小4byte(32位二进制数)

1byte –> 8位二进制数

范围

image-20250825164044145

1.1.1 int的小弟和大哥(short/long)

short 短整形 2bytes

image-20250825164319981

long 长整形

4 or 8 bytes (取决于编译器和操作系统)

image-20250825164428422

Tips: 可以用sizeof()运算符获得数据类型或者变量大小;

image-20250825164527895

unsigned int

无符号整数: 0,1,2,3…

4bytes

image-20250825164626180

1.2 单个字符(char)

1bytes 相当于一个无符号整数—>ASCII码–>字符

1.3 浮点数(float/double)

机制:科学计数法

数值 = 尾数 x 底数的指数次幂

image-20250825165843689

1.4 布尔(bool)

真/假: true/false –> keywords(保留字)

image-20250825171943223

1byte

本质 1或0

while(True){

}

1.5 字符串string

一串字符 长度不固定

本质为std里的一个类。

2. Constant常量

宏(定义)Macro:事先说好的规则或者模式

在预编译阶段进行

# define A B  //用B替换所有出现的A
cout<< A;

3.不变量

有一些变量,赋予储值后就不想他改变了

image-20250825173615953

Tips: const和#define的区别

(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。
(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。
(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有n个备份;const定义的只读变量在程序运行过程中只有一份备份。
(4)从代码调试的方便程度而言: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了。

4. 运算

4.1 四则运算

加:+

减:-

乘:*

除:/

4.2 取模

a%b:得到a除以b的余数 a和b必须为整数

image-20250825174558440

4.3 自增自减运算符

自增:++

自减: --

image-20250825175315650

顺序的差异如上图所示;

为何3号位程序输出值为3,没有继续+1?

解答如下:后置自增的程序是在程序检查后进行的,该变量的值确实+1了,但未能被cout函数读取,这也正解释了为什么第四个的自增值为5;

5. 转换

5.1 自动转换

类似于Int中除法自动向下进位

5.2 强制转换

C风格的强制类型转换:

用括号加类型名,并不改变变量本来属性

#include <iostream>


int main() {
int nVar1 = 10;
int nVar2 = 3;
float fRes;

fRes = nVar1 / nVar2;
std::cout << fRes << std::endl;

fRes = (float)(nVar1 / nVar2);//括号已经自动向下取整,已经向下进位了
std::cout << fRes << std::endl;

fRes = (float)nVar1 / nVar2; //nVar2 编译器会自动变为float类型
std::cout << fRes << std::endl;
std::cin.get();
return 0;
}

6.静态和动态类型转换

image-20250825181517473

7.格式化:让Output满足格式

  • 控制有效数字位数(精度)
  • 四舍五入
  • 控制小数点后几位

流操作算子:setprecision(5) //五位有效数字

oct //8进制

hex //16进制