C++数据类型和变量
一、数据类型
数据就类似于衣服需要分类存放管理,不同的数据要存放在不同的空间(变量)里。
1.整型
类型 | 存储需求 | 取值范围 |
---|---|---|
short | 2字节 | -32,768 ~ 32,767 |
int | 4字节 | –2,147,483,648 ~2,147,483, 647 |
long | Windows4字节,Linux4字节(32位),8字节(64位) | –2,147,483,648 ~2,147,483, 647 |
long long | 8字节 | –9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 |
区别:取值范围不同,所占的空间也不一样。
2.浮点型
数据类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |
一般情况下,double 最常用;float 型的数值有一个后缀“f”,没有后缀的浮点数默认为 double 型。
我在Visual Studio2019中输出一个小数,默认会显示出6位有效数字。
//科学计数法
float a = 2e1; // 2 * 10 ^ 1 e后面为正数就代表:e前数字*10^n(n代表e后面的数)
cout << "a: " << a << endl; //输出:a: 20
float b = 2e-1; // 2 * 0.1 ^ 1 e后面为负数就代表:e前数字*0.1^n(n代表e后面的数)
cout << "b: " << b << endl;//输出:b: 0.2 科学计数法也可以表示小数
3.字符型
是指由单引号括起的单个字符
类型 | 存储需求 | 取值范围 |
---|---|---|
char | 1 字节 | –128 ~ 127 |
//字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
char a = 'a';
cout << (int)a << endl; //97
4.布尔型
bool类型,只要是非0的值都代表true
数据类型类型 | 存储需求 | 结果真 | 结果假 |
---|---|---|---|
bool | 1字节 | true(1) | false(0) |
5.sizeof
作用:查看数据类型所占内存大小
语法: sizeof( 数据类型 / 变量名)
short num1 = 10;
int num2 = 10;
long num3 = 10;
long long num4 = 10;
cout << "1、整型所占内存空间为: " << endl;
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
cout << "num1 类型所占内存空间为: " << sizeof(num1) << endl; //等价于第6行
cout << "num2 类型所占内存空间为: " << sizeof(num2) << endl; //等价于第7行
cout << "num3 类型所占内存空间为: " << sizeof(num3) << endl;//等价于第8行
cout << "num4 类型所占内存空间为: " << sizeof(num4) << endl;//等价于第9行
cout << "\n2、浮点型所占内存空间为: " << endl;
cout << "float 类型所占内存空间为: " << sizeof(float) << endl;
cout << "double 类型所占内存空间为: " << sizeof(double) << endl;
cout << "\n3、字符型" << endl;
cout << " char类型所占内存空间为 " << sizeof(char) << endl;
cout << "\n4、布尔类型" << endl;
cout << "bool类型所占内存空间为 " << sizeof(bool) << endl;
二、变量
变量,顾名思义“可变的量,简称变量”。对变量的操作只有两种,读和写。
语法:数据类型 变量名 = 初始值;
1.标识符
什么是标识符?
标识符是赋予变量、类和方法的名称
标识符必须以字母、下划线开头
标识符只能由字母、数字、下划线组成
标识符对大小写敏感
在定义变量的名称时需要注意:
变量名要做到见名知意,尽量采用英文单词,尽量采用驼峰命名法
变量名只能是字母和数字或者下划线组成。并且只能以字母或者下划线开头。
变量名要避开关键字。
2.变量的定义与赋值
#include <iostream>
using namespace std;
int main() {
int a = 10; //定义a变量并且赋上初始值10
string name = "小明";//定义name变量并且赋上初始值为小明
cout <<"姓名:" << name <<",年龄:" << a << endl;//输出:姓名:小明,年龄:10
system("pause");
return 0;
}
注意:
定义变量时 要使用类型名打头(用于区分不同的类型),后面跟变量名称
“=”并不是相等运算符,而是赋值运算符,在上面代码中它表示将右侧的10写入变量 a中
C++在创建变量时,必须给变量一个初始值,否则会报错
3.变量作用域
作用域是程序的一个区域
- 局部变量: 在代码块内部声明的变量。
- 全局变量: 在所有函数外部声明的变量。
1、 局部变量: 在函数或一个代码块内部声明的变量,只能在函数内部或者代码块内部的语句使用
#include <iostream>
using namespace std;
int main ()
{
//局部变量声明
int a, b;
int c;
//赋值
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
2.全局变量:在整个页面都可以使用。
#include <iostream>
using namespace std;
// 全局变量声明
int c;
int main ()
{
// 局部变量声明
int a, b;
//赋值
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
4.指出下图中哪些变量名是错误的
5.常量
常量是一个固定的值
定义常量两种方式
-
#define 宏常量
语法:#define 常量名 常量值
例子:#define a 3.14
如果强制a为其他数,会报如下图错误:
-
const修饰的变量
语法:const 数据类型 常量名 = 常量值
例子:const int a= 12;
三、交互
上面的案例都是输出数据,如果需要接收内容怎么办?
1.关键字:cin
语法: cin >> 变量
2.练习:从控制台输入一个名字,在名字后追加三个字”你很棒”,再接收从控制台输入的年龄和成绩进行输出。
string name = "";
int age = 0;
double score = 0;
cout << "请输入一个名字:" << endl;
cin >> name;
name = name + "你很棒!";
cout << "名字:" << name << endl;
cout << "请输入年龄:" << endl;
cin >> age;
cout << "年龄:" << age << endl;
cout << "请输入成绩:" << endl;
cin >> score;
cout << "成绩:" << score << endl;
四、运算
1. 算术运算符
数学运算 y=5,下面的表格解释了这些算术运算符的应用方式。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加 | x=y+2 | x=7 |
- | 减 | x=y-2 | x=3 |
* | 乘 | x=y*2 | x=10 |
/ | 除 | x=y/2 | x=2.5 |
% | 求余数(保留整数) | x=y%2 | x=1 |
++ | 累加 | X=++Y | x=6 |
– | 递减 | X=- -y | x=4 |
注意:++在前,先进行++,再计算表达式; ++在后, 先计算表达式,后进行++
int a = 5;
int b = 3;
cout << a + b << endl; //1.加法
cout << a - b << endl; //2.减法
cout << a * b << endl; //3.乘法
//4.除法
cout << a / b << endl; //除法(两个整数做相除运算,结果还是整数)
cout << b / a << endl; //为零,不保留小数部分
//cout << 5 / 0 << endl; //除数不可以为零,会报错!
cout << 0.4 / 0.21 << endl; //两个小数相除,运算结果可以是小数
//5.求余数:只有整型才能进行取余
cout << 5 % 2 << endl;
cout << 2 % 5 << endl;//输出2(求余数前面的数小,则结果为前面的数)
//cout << 10 % 0 << endl;//不能对零求余或者除零!!!
//cout << 0.5 % 0.25 << endl;//两个小数不可以取余!!!
//6.++在前(前置递增)和++在后(后置递增)的区别:
//前置递增:先进行++,再计算表达式
int a2 = 10;
int b2 = ++a2 * 10;
cout << " \n前置递增a2= " << a2 << endl;//前置递增a2= 11
cout << "前置递增b2= " << b2 << endl;//前置递增b2= 110
//后置递增:先计算表达式,后进行++
int a3 = 10;
int b3 = a3++ * 10; //先让a3的原始值10乘上10 得100赋给b3,所以打印b3为100;计算完表达式100后,才让a3进行+1的操作,等于11
cout << " \n后置递增a3= " << a3 << endl;//后置递增a3= 11
cout << "后置递增b3= " << b3 << endl;//后置递增b3= 100
2.赋值运算符
运算符 | 描述 | 简化写法 | 等价于 |
---|---|---|---|
= | 赋值 | a=5 | a=5 |
+= | 加等 | a + = 5 | a=a+5 |
-= | 减等 | a - = 5 | a = a - 5 |
*= | 乘等 | a * = 5 | a = a * 5 |
/= | 除等 | a / = 5 | a = a / 5 |
%= | 余等 | a % = 5 | a = a % 5 |
int a = 10;
a = 20;//赋值
cout << a << endl;
a += 10;//加等
cout << a << endl;
a -= 10;//减等
cout << a << endl;
a *= 10;//乘等
cout << a << endl;
a /= 10;//除等
cout << a << endl;
a %= 10;//余等
cout << a << endl;
3.比较运算符
用于测定变量或值是否相等,并返回一个bool值
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 1== 2 | false |
!= | 不等于 | 1 != 2 | true |
< | 小于 | 2< 1 | false |
> | 大于 | 2 > 1 | true |
<= | 小于等于 | 2 <= 1 | false |
>= | 大于等于 | 2 >= 1 | true |
4.逻辑运算符
用于测定变量或值之间的逻辑,返回bool值
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
&& | and | (5<10 && 3>1) | true |
|| | or | (5==5 || 3==5) | false |
! | not | !(5 == 3) | true |
int a = 0;
int b = 0;
cout << (a && b) << endl;//输入0
&& 全是真,否则为假 。
|| 有一个真,则结果为真
!不等于。