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
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值;

变量名:在计算机语言中变量表示某个存储数据空间的名称。
它的命名有如下规则:

  1. 变量名中只能出现字母(A~Z,a~z)、数字(0~9)或者下划线。
  2. 第一个字符不能是数字。
  3. 不能是C++关键字。所谓关键字,即C++中已经定义好的有特殊 含义的单词。
  4. 区分大小写。
    变量名建议5,6,不作为硬性要求
  5. 对标识符的长度没有统一规定,随着系统的不同而有不同的规定,一般来说,C++编译器可以识别前31个字符,所以标识符的长度不要超过31位。
  6. 给标识符命名时,争取做到 见名知义 的效果,方便自己和他人的阅读。

关键字
关键字(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个注意

  1. a / b,若 a,b均为整数,则结果为整数,若其中一个为浮点数,则结果为浮点数;
  2. a % b ,要求:a, b均为整数;
  3. 遵循算数的自然特征,如分母不为0;
  4. 防止数据长度溢出。

补充:赋值运算符

  1. 由于赋值运算符=右边的表达式也可以是赋值表达式,因此,下述形式 :变量=(变量=表达式);
    是成立的,从而形成嵌套的情形。其展开之后的一般形式为:变量=变量=…=表达式;
    例如a=b=c=d=e=5;,它实际上等价于:e=5;d=e;c=d;b=c;a=b;
  2. 在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。

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
好了,本节课的知识就到这里了哦!

posted @ 2021-08-09 14:37  HelloHeBin  阅读(418)  评论(0编辑  收藏  举报