2.1数据类型
数据类型 | 占用字节数 | 取值范围 |
---|---|---|
bool | 1 | true 或 false |
char | 1 | -128 到 127 或 0 到 255 (取决于是否带符号) |
unsigned char | 1 | 0 到 255 |
short | 2 | -32,768 到 32,767 |
unsigned short | 2 | 0 到 65,535 |
int | 4 | -2,147,483,648 到 2,147,483,647 |
unsigned int | 4 | 0 到 4,294,967,295 |
long | 4 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 | 0 到 4,294,967,295 |
long long | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long | 8 | 0 到 18,446,744,073,709,551,615 |
float | 4 | 大约 1.17549e-38 到 3.40282e+38 |
double | 8 | 大约 2.22507e-308 到 1.79769e+308 |
long double | 8 或更多 | 大约 2.22507e-308 到 1.79769e+308 |
请注意,占用字节数和取值范围是一般情况下的默认值,实际上可能会因平台和编译器的差异而有所变化。
字符串string:由于string在c++中属于类类型,不是基本数据类型,类不能计算其在内 存中所占大小,非要用sizeof(string)来算的话,一般算出来的结果是 sizeof(string)=4byte,如果string字符串内容很多,很明显就不是其 真实大小,string类里面有计算其字节大小的函数如:size(),length()。
注:如何区分和使用这两个浮点类型呢,首先float和double的精度不同, float保留到小数点后面7位,而double保留到小数点后面16位,float能保证6 位有效数字,而double能保证15位有效数字,如果在不追求精度的的情况下当然用 float比较好,节省内存,如果需要很高的精度的情况下,最好还是用 double,平时我们定义浮点型变量一般都用double,毕竟精度高,一般精度 的损失是不能忽略的。
2.2常量和变量
常量
- 直接常量:直接表示的常量;如30,30.0
- 符号常量:用符号表示的常量
定义符号常量的方法:
- 使用编译预处理指令
- 使用C++的常量说明符const
#define PI 3.14159 const double r=2.5
注:符号常量必须先定义后引用,并且符号常量在程序中只能引用,不能改变其值。
变量
程序执行过程中,值可以改变的量就叫做变量,由用户指定数据类型并命名。
标识符:用来标识变量名、函数名、数组名、用户自定义类型名等名称的字符称为标识符。
标识符是由字母、数字、下划线 "_" 组成,第一个字符不能是数字字符;同时区分大小写。
C++语法中用到的单词或字符称为关键字(Keyword)或保留字不可以作为标识符。
变量的定义与赋值
定义格式
类型说明符 变量名1 变量名2 ......;
int i, j, k;
float x, y , z;
double weight;
变量赋初值
首次使用变量时,变量必须有一个确定值。
- 变量说明时直接赋初值
int i=1, j=2, k=3; float x=12.3; char c='A'; float x(12.3);
- 使用赋值语句赋初值
float x;
x = 12.3;
2.3整型数据
整型常量
- 十进制整数。123、-10
- 八进制整数。0~7组成,以0开头,012、052
- 十六进制整数。0x开头,0x123、0xAB
长整型常数:以L或l结尾;无符号整型常数:以U或u结尾。
整型变量
在C++中,可以使用不同的方式定义整型变量,具体取决于变量的需求和表示范围。以下是常见的整型变量定义方式及其表示范围:
-
int
:使用关键字int
定义整型变量。通常表示范围为-2,147,483,648至2,147,483,647,取决于编译器和平台。 -
unsigned int
:使用无符号关键字unsigned
修饰int
定义无符号整型变量。通常表示范围为0至4,294,967,295。 -
short
:使用关键字short
定义短整型变量。通常表示范围为-32,768至32,767。 -
unsigned short
:使用无符号关键字unsigned
修饰short
定义无符号短整型变量。通常表示范围为0至65,535。 -
long
:使用关键字long
定义长整型变量。通常表示范围为-2,147,483,648至2,147,483,647,取决于编译器和平台。 -
unsigned long
:使用无符号关键字unsigned
修饰long
定义无符号长整型变量。通常表示范围为0至4,294,967,295。 -
long long
:使用关键字long long
定义长长整型变量。通常表示范围为-9,223,372,036,854,775,808至9,223,372,036,854,775,807,取决于编译器和平台。 -
unsigned long long
:使用无符号关键字unsigned
修饰long long
定义无符号长长整型变量。通常表示范围为0至18,446,744,073,709,551,615。
2.4浮点型数据
浮点型常量
- 十进制小数形式(必须有小数点):0.12、.12、12.
- 指数形式(科学表示法):基数10用字母E或e表示。
实数常量后面加上f或F表示float型数,加上l或L表示long double型数
浮点型变量
在C++中,可以使用不同的方式定义浮点型变量,具体取决于变量的需求和表示范围。以下是常见的浮点型变量定义方式及其表示范围:
-
float
:使用关键字float
定义单精度浮点型变量。通常表示范围为1.2e-38到3.4e38,但精确范围和精度会因编译器和平台而有所不同。 -
double
:使用关键字double
定义双精度浮点型变量。通常表示范围为2.3e-308到1.7e308,同样精确范围和精度会因编译器和平台而有所不同。 -
long double
:使用关键字long double
定义扩展精度浮点型变量。它比double
的表示范围更大,通常为3.4e-4932到1.1e4932,但一样会因编译器和平台而有所不同。
请注意,浮点数的表示范围和精度是有限的,取决于计算机的硬件和C++实现。特别是在进行浮点数计算时,可能存在舍入误差和精度损失的问题。为了避免这些问题,建议在比较浮点数时使用适当的容差或浮点数比较函数。
另外,C++还提供了一些数学库(如<cmath>
)来进行数值计算和处理浮点数。通过使用这些库中的函数,您可以执行各种数学操作,如四舍五入、取整、开方、对数等,以及处理浮点数的特殊需求。
2.5字符型数据
字符型常量:ASCII码(32个控制码96个符号)用7为2进制表示一个字母或字符信息。在计算机中存储单位为字节,所以最高位补0,组成8位2进制数。
C++转义字符及其含义:
\\
:反斜杠\'
:单引号\"
:双引号\?
:问号\a
:响铃(警报)\b
:退格\f
:换页\n
:换行\r
:回车\t
:水平制表符\v
:垂直制表符\0
:空字符\nnn
:八进制表示的字符(n代表一个八进制数字)
字符型变量
定义好字符型变量再对其进行赋值
char str;
str='A';
str='\101'; //八进制转义字符
str='\x41' ; //十六进制转义字符
str=65; //十进制整数
str=0101; //八进制整数
str=0x41; //十六进制整数
大写字母转换为小写字母:
#include <iostream>
using namespce std;
int main() {
char c1, c2;
c1='B';
c2=c1+32;
cout<<c1<<'\t'<<c2<<'\n';
return 0;
}
字符串常量
字符串结束标志'\0'是编译系统自动加到字符串后面。双引号括起来的序列,后面就会有一个字节的字符'\0'。例如字符串"a"和字符'a'
2.6类型转换
不同数据类型间的混合算数运算
char——>int和float——>double是运算中一定要进行的转换。
C++规定有符号类型和无符号类型运算结果为无符号类型。
赋值时的类型转换
赋值运算符(=)左右两边的变量类型不一致但类型兼容时,系统自动进行类型转换,规则如下:
- 实型数(float、double)赋整型(int)变量时,去掉小数部分仅取整数部分赋给整型变量。若超过取值范围则赋值结果错误。
- 整型数(int)赋给实型数(float、double)时,将整型数变换为实型数,再赋给实型数。
- 少字节整型数据(short)赋给多字节整型变量(int、long),少字节整型数据放到多字节整型数据的低位字节,高位字节拓展为数据的符号位。称为“符号拓展”。
- 多位字节数据赋值给少位字节数据,多位字节低位一一赋值高位字节舍去。
- 字符型数据(char)赋给整型变量(int)时有两种情况:(1)无符号字符类型数据(unsigned char),将其放到整型变量(int)的低字节;(2)有符号字节类型数据(char),将其放到整型变量的(int)的低字节,高字节拓展为符号位。
- 无符号整型(unsigned int)或长整型(unsigned long)赋值给整型变量(int)时,若不超出int的取值范围,不会产生任何问题。
强制类型转换
(类型名)(表达式)
(double)a; //a转换成double类型
(int)(3.5+x); //表达式的值转换成int类型
2.7运算符与表达式
C++算数运算符
运算符 | 说明 | 优先级 |
---|---|---|
*,/,% | 乘法、除法、取模 | 高 |
+, - | 加法、减法 | 低 |
C++关系运算符
运算符 | 说明 | 优先级 |
---|---|---|
== | 等于 | 相同(低) |
!= | 不等于 | |
> | 大于 | 相同(高) |
< | 小于 | |
>= | 大于等于 | |
<= | 小于等于 |
C++逻辑运算符
- 逻辑与(&&):当所有操作数都为true时,逻辑与运算结果为true;只要有一个操作数为false,逻辑与运算结果为false。
- 逻辑或(||):只要有一个操作数为true,逻辑或运算结果为true;所有操作数都为false时,逻辑或运算结果为false。
- 逻辑非(!):对单个操作数进行取反运算,如果操作数为true,则逻辑非运算结果为false;如果操作数为false,则逻辑非运算结果为true。
逻辑运算符的优先级关系为逻辑非(最高优先级) > 逻辑与 > 逻辑或(最低优先级)。
复合赋值运算符
格式:
变量 双目运算符=表达式
等同于:
变量 =变量 双目运算符 表达式
自增运算符与自减运算符
1.自增运算符(++)使变量的值增1,两种使用方法:
- 前置。++i; 先执行i=i+1,再使用i的值
- 后置。i++;先使用i的值,再执行i=i+1
2.自减运算符(--)使变量的值减1,两种使用方法:
- 前置。--i; 先执行i=i-1,再使用i的值
- 后置。i--;先使用i的值,再执行i=i-1
sizeof运算符及表达式:
格式:sizeof(类型) 或 sizeof(变量)
用于计算某一操作数类型或变量的字节数
sizeof(int);
double x;
sizeof (x);
2.8简单的输入输出语句
使用C++的输入/输出流时,必须在程序开头用编译预处理指令
#include <iostream>
十进制整数、实数、与字符数据的输入
cin>>变量名1>>变量名2>>......>>变量名n;
输入项多余一个时,应用空格和回车将输入项分隔。
输入项结束:
- 最后一个输入项后输入空格、回车、制表键(Tab);
- 遇到非法输入。
cin语句过滤空格和回车;若要输入空格和回车,使用cin.get函数,格式如下:
cin.get(字符型变量); 或 字符型变量=cin.get();
十六进制或八进制数据的输入
hex | 十六进制 |
oct | 八进制 |
dec | 十进制 |
int a,b,c;
cin>>hex>>a;
cin>>oct>>b;
cin>>dec>>c;
注意:
- 八进制或十六进制的输入,只适用于整型变量,不适用于字符型、实型变量。
- cin中指明数制后,其指明数制一直有效持续到新的cin指明另一个数制。
- 输入的格式、个数、类型必须与cin语句中的一一对应,否则对当前输入错误,后续输入也错误
数据输出
使用cout语句:
cout<<表达式1<<表达式2<<......<<表达式n;
其中若用了双引号(" "),双引号内的内容原样输出,C++中输出数值的有效数位默认6位。
控制符 | 功能 |
dec | 十进制显示(默认) |
hex | 十六进制显示 |
oct | 八进制显示 |
setprecision(n) | 浮点数时显示有效的n位数 |
setw(n) | 输出项宽度位n列(默认右对齐) |
setiosflags(ios::fixed) | 设置浮点数以固定小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以指数形式显示 |
setiosflags(ios::left) | 输出数据左对齐 |
setiosflags(ios::right) | 输出数据右对齐 |
使用上述控制符必须包含头文件iomanip
#include <iomanip>
注意:
- 指明一种数值输出时,对其后的输出均有效。
- 实数的输出也是一旦指明输出形式,对其后的输出也有效。
- 控制符setw(n)仅对其后一个输出项有效。