变量
变量的创建:数据类型是用来创建变量的。经常变化的值称为变量。例:
int age;
char ch;
double weight;
变量的命名规则:
1.只能由数字,字母,下划线组成,且必须以字母或下划线开头。
2.不能包含特殊字符,如空格,连字符等。
3.不能使用语言的关键字,如int,char等。
4.应具有意义,有助于理解变量的含义和用途,
5.应简洁明了。
6.要区分大小写。
变量的初始化:在创建变量时就给一个值,就叫初始化。
int age=18;
char ch='w';
double weight=48.0;
变量的分类
全局变量:在大括号外部定义的变量就是全局变量。它的使用范围广,整个工程中使用都有办法。
#include <iostream>
using namespace std;
int age=18; //全局变量
int main()
{
int global=2024;
cout<< age<<" "<<global<<endl;
return 0;}
若局部变量和全局变量同名,局部变量优先使用。
全局与局部变量在初始化上有如下区别:
全局变量:通常在定义时就被初始化,如果没有明确指定初始值,通常会被初始化为0.
局部变量:通常不会自动初始化。需要在使用之前明确地赋值或初始化。若没有初始化,它们的值是未定义的。可能会导致不可预测的行为或运行错误。
常量
常量分为字面常量,#define定义的常量,const定义的常量。
字面常量
1.整型常量:100,-5,0可写成10进制,8进制,16进制。
10进制数字,如:6,17,22
8进制数字一般是数字0开头的,如:012,016
16进制数字,一般是0x开头的数字,如:0x123,0xFF
2.字符常量:‘a’
3.浮点型常量:3.14,1E6
#define定义的常量
#define 常量名 内容
#define M 100
#define PI 3.14159
#define CH 'x'
这里定义的M,CH,PI都是常量,可以直接使用,但不能被修改。
用#define定义常量不关注类型,编译在处理时会直接替换,在出现变量名字的地方全部替换成变量的内容。
const定义变量
比#define定义变量更严谨。
const 类型 常量名字=常量值;
const double PI=3.14159;
在习惯上,这种变量的名字会写成大写,而普通变量的名字不会全大写,这样可以做一个区分。
算术操作符
+ - * / %
注:取模操作符的操作数只能是整型,不能是浮点型。否则会报错。
浮点数的除法:
float x=6/4;
cout<<x<<endl; //1
float y=6.0/4;
cout<<y<<endl; //1.5
以上不同的原因在于整数除法是整除,只会返回整数部分,丢弃小数部分。
希望得到浮点数的结果,两个运算数中必须至少有一个浮点数,这时就会进行浮点数除法。
负数也支持取模,但结果的正负号由第一个运算数的正负号决定。
数值溢出:实际运算过程中存在加法操作导致数据范围超过当前数据类型规定的范围。
类型转化
当不同类型的数据进行混合运算时,或者赋值时等号两边的类型不统一时,都会发生类型转换。涉及两类转换:整型提升和算术转换。
整型提升:表达式中的char和short类型会先转换成int类型再参与运算。
算术转换:表达式中出现下面的 任意两种类型的值进行计算时,要先将下面的类型转换成另一种才能计算。
long long
double
float
unsigned long int
long int
unsigned int
int
这些转换都是隐式自动发生的。
#include <iostream>
using namespace std;
int main()
{
char a='a';
int b=10;
char c=a+b; //这里a会发生整型提升。
int c=10;
double d=3.14;
double e=c+d; //c+d时会发生算数转换。
return 0;}
赋值时类型转换:当赋值操作符两端的数据类型不一致时,就需要类型转换(也是隐式自动发生的)。
1.float和double赋值给int,直接截断小数部分,保留整数部分。
int a=3.14;//a的值为3
较大转较小类型会发生截断,按照较小类型的长度,保留低位数据给较小的类型。
强制类型转换:
(类型名)表达式
如:
double d=3.14;
int a=(int)d;
自增自减:前置++:先+1,后使用
后置++:先使用,后+1