1.2 变量与数据类型
1.2 变量与数据类型
1. 常用的数据类型
数据类型 | 类型标识符 | 存储大小 | 数据范围 |
---|---|---|---|
字符型 | char | 1B | [-2^7, 2^7-1] |
短整型 | short | 2B | [-2^15, 2^15-1] |
整型 | int | 4B | [-2^31, 2^31-1] |
单精度浮点数 | float | 4B | [-2^128, 2^128] |
双精度浮点数 | double | 8B | [-2^1024, 2^1024] |
长整型 | long | 4B | [-2^31, 2^31-1] |
长长整型 | long long | 8B | [-2^63, 2^63-1] |
无符号整型 | unsigned int | 4B | [0, 2^32-1 ] |
无符号长整型 | unsigned long | 4B | [0, 2^32-1] |
无符号长长整型 | unsigned long long | 8B | [0, 2^64-1] |
备注:其实所谓的空间大小只是结合具体的操作系统和编译环境确定的,目前我们可以暂且认为每种数据类型的大小是固定的(如上),但是这种说法其实不太正确,应当说是基于一定的标准的时候,才有这样的规范。
补充知识: sizeof 关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法:sizeof(数据类型或变量)
#include<iostream>
using namespace std;
int main(){
cout << sizeof(short) << endl; //2
cout << sizeof(int) << endl; //4
cout << sizeof(long) << endl; //4
cout << sizeof(long long) << endl; //8
return 0;
}
2. 变量名
变量:类似于我们数学上所学习的 x、y
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值;
变量名:在计算机语言中变量表示某个存储数据空间的名称。
它的命名有如下规则:
- 变量名中只能出现字母(A~Z,a~z)、数字(0~9)或者下划线。
- 第一个字符不能是数字。
- 不能是C++关键字。所谓关键字,即C++中已经定义好的有特殊 含义的单词。
- 区分大小写。
变量名建议5,6,不作为硬性要求: - 对标识符的长度没有统一规定,随着系统的不同而有不同的规定,一般来说,C++编译器可以识别前31个字符,所以标识符的长度不要超过31位。
- 给标识符命名时,争取做到 见名知义 的效果,方便自己和他人的阅读。
关键字
关键字(keyword)又称保留字,是整个语言范围内预先保留的标识符。
每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符(变量,函数等)。
补充: C++关键字如下
作用类型 | 关键字 |
---|---|
数据类型 | void,int,char,float,double,bool,w_char |
类型定义 | struct,union,enum,class,typedef |
常量值 | true,false |
类型修饰符 | long,short,singed,unsigned |
类型限定符 | const,volatile,restrict |
存储说明符 | auto,register,static,extern,thread_local,mutable |
其它修饰符 | inline,asm |
循环控制 | for,while,do |
跳转控制 | break,continue,return,goto |
分支结构 | if,else,switch,case,default |
内存管理 | new, delete |
运算符 | sizeof,and,and_eq,bitand,bitor,compl,not,not_eq,or,or_eq,xor,xor_eq |
访问限定符 | this,friend,virtual,mutable,explicit,operator |
类访问修饰符 | private,protected,public |
模板 | template,typename |
命名空间 | namespace,using |
异常处理 | throw,try,catch |
3. 运算符
符号 | 使用 | 作用 | 符号 | 使用 | 作用 |
---|---|---|---|---|---|
+= | a += 2; | 等同于 a = a + 2; | -= | a -= 2; | 等同于 a = a - 2; |
*= | a *= 2; | 等同于 a = a * 2; | /= | a /= 2; | 等同于 a = a / 2; |
%= | a %= 2; | 等同于 a = a % 2; | |||
++ | a++; 或者 ++a; | 等同于 a = a + 1; | -- | a--; 或者 --a; | 等同于 a = a - 1; |
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int a = 20;
a += 2;// a = a+2; a=22
a -= 2;// a = a-2; a=20
a *= 2;// a = a*2; a=40
a /= 2;// a = a/2; a=20
a %= 3;// a = a%3; a=2
cout<<a<<endl;
a++;// a = a+1; a=3
++a;// a = a+1; a=4
a--;// a = a-1; a=3
--a;// a = a-1; a=2
cout<<a<<endl; //2
cout<<a++<<endl;//2
cout<<++a<<endl;//4
/* a++ 与 ++a 的区别
a++ :先使用,再运算
++a :先运算,再使用*/
return 0;
}
算数运算符的4个注意
- a / b,若 a,b均为整数,则结果为整数,若其中一个为浮点数,则结果为浮点数;
- a % b ,要求:a, b均为整数;
- 遵循算数的自然特征,如分母不为0;
- 防止数据长度溢出。
补充:赋值运算符
- 由于赋值运算符
=
右边的表达式也可以是赋值表达式,因此,下述形式 :变量=(变量=表达式);
是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=…=表达式;
例如a=b=c=d=e=5;
,它实际上等价于:e=5;d=e;c=d;b=c;a=b;
- 在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。
4. 数学表达式
函数原型 样例 说明
double abs(double x) abs(-3.14)=3.14 绝对值函数,返回 x 的绝对值
double round(double x) round(3.14)=3 四舍五入函数
double floor(double x) floor(3.14)=3 向下取整,返回不大于 x 的最大整数
double ceil(double x) ceil(3.14)=4 向上取整,返回不小于 x 的最小整数
double sqrt(double x) sqrt(9)=3 平方根函数,返回 x 的算术平方根
double log(double x) log(1)=0 对数函数,返回 x 的自然数对数
double exp(double x) exp(1)=2.718282 自然数指数函数,返回 e^x
double rand() rand()=41 随机生成一个[0, 32767] 的整数
double pow(double x,y) pow(2,3)=2^3=9 指数函数,返回 y个 x的乘积
double pow(double x,double y) 上面简写了
double sin(double x) sin(pi/2)=1 正弦函数
double cos(double x) cos(pi/2)=0 余弦函数
double tan(double x) tan(0)=1 正切函数
double sin(double x) asin(1)=pi/2 反正弦函数
double cos(double x) acos(-1)=pi 反余弦函数
double tan(double x) atan(1)=0.78 反正切函数
使用前需导入头文件:#include<cmath>
#include <iostream>
#include <cmath>
using namespace std;
int main(){
cout<<"ceil(3.14)="<<ceil(3.14)<<endl; // 4
cout<<"floor(3.14)="<<floor(3.14)<<endl;// 3
cout<<"4^3="<<pow(4,3.0)<<endl; // 64
cout<<"sqrt(9)="<<sqrt(9)<<endl; // 3
return 0;
}
5. 变量自增与自减
表达式 | 作用 | 特点 | 表达式 | 作用 | 特点 |
---|---|---|---|---|---|
a++ | a=a+1 | 先返回,再运算 | ++a | a=a+1 | 先运算,再返回 |
a-- | a=a-1 | 先返回,再运算 | --a | a=a-1 | 先运算,再返回 |
#include <iostream>
using namespace std;
int main() {
int a = 2;
cout<<a++<<endl; //2
cout<<a<<endl; //3
cout<<++a<<endl; //4
cout<<a<<endl; //4
cout<<a--<<endl; //4
cout<<a<<endl; //3
cout<<--a<<endl; //2
cout<<a<<endl; //2
return 0;
}
6. 常量
常量的作用:用于记录程序中不可更改的数据
常量的书写:并无严格要求,但是建议大写,以便于和普通变量相区分。
常量的特性:只读不可写,因此也称为只读变量。
两种定义常量的方式
- 方式一:
const int X = 2;
定义的常量 X=2,且不能修改,否则报错,如以下程序就会报错:
const int X = 2;
X = 3; //error
一般我们将常量定义在外面,但是也可以定义在main中
#include <iostream>
using namespace std;
const int X = 1; //一般我们将常量定义在外面
int main() {
const int Y = 2; //但是也可以定义在main中
cout<<X<<" "<<Y<<endl;
return 0;
}
- 方式二:
#define 常量名 常量值
宏定义,通常在文件上方定义,表示一个常量,
如:#define PI 3.14
,相当于PI = 3.14
,以后就可以直接使用PI
。
#include <iostream>
#define PI 3.14
using namespace std;
int main() {
cout<<PI <<endl; //3.14
return 0;
}
7. 运算符
类型 | 作用 |
---|---|
1.算术运算符 | 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 |
2.关系运算符 | 用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。 |
3.逻辑运算符 | 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 |
4.位操作运算符 | 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 |
5.赋值运算符 | 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 |
6.条件运算符 | 这是一个三目运算符,用于条件求值(?:)。 |
7.逗号运算符 | 用于把若干表达式组合成一个表达式(,)。 |
8.指针运算符 | 用于取内容(*)和取地址(&)二种运算。 |
9.求字节数运算符 | 用于计算数据类型所占的字节数(sizeof)。 |
10.特殊运算符 | 有括号(),下标[],成员(->,.)等几种。 |
说明:大体的运算顺序是:先乘除,再加减,后赋值
如果真的记不住,那么可以通过()来改变运算优先顺序,()内先运算。
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [ ] | 数组下标 | a[100] | 左到右 | |
( ) | 圆括号 | a*(b+c) | |||
. | 成员选择(对象) | a.b | |||
-> | 成员选择(指针) | a->b | |||
2 | +, - | 正运算符,负运算符 | +a,-a | 右到左 | 单目运算符 |
! | 逻辑非运算符 | ||||
~ | 按位取反运算符 | ||||
++,-- | 自增运算符,自减运算符 | ++a, a++,--a, a-- | |||
*,& | 取值运算符,取址运算符 | *a,&a | |||
(type) | 强制类型转换 | (int)a | |||
sizeof | 长度运算符 | sizeof(float) | |||
3 | *,/,% | 乘,除,取余 | a%b | 左到右 | 双目运算符 |
4 | +,- | 加,减 | a+b | ||
5 | << ,>> | 左移, 右移 | a>>1, b<<c | ||
6 | >, >= | 大于, 大于等于 | a > b, a >= b | ||
<, <= | 小于, 小于等于 | a < b, a <= b | |||
7 | ==, != | 等于,不等于 | a == b, a != b | ||
8 | & | 按位与 | a&b | ||
9 | ^ | 按位异或 | a^b | ||
10 | | | 按位或 | a|b | ||
11 | && | 逻辑与 | a&&b | ||
12 | || | 逻辑或 | a||b | ||
13 | ? : | 条件运算符 | a?b:c | 右到左 | 三目运算符 |
14 | = | 赋值 | |||
*=, /=, %= | 乘(除/取余)后赋值 | ||||
+=, -= | 加(减)后赋值 | ||||
<<=, >>= | 左(右)移后赋值 | ||||
&=, |=, ^= | 按位与(或/异或)后赋值 | ||||
15 | , | 逗号运算符 | int a, b; | 左到右 |
运算符优先级:https://baike.so.com/doc/6149729-6362919.html
运算符优先级:https://www.cnblogs.com/nightingaleYch/articles/4818559.html
好了,本节课的知识就到这里了哦!