第三章 C++基础语法
前言
记录C++的一些基本语法
1. 基本内置类型
就是定义的数据类型,C++作为一种面向对象的编程语言,可以很自由地定义自己想要的类型,除此之外,C++本身也定义了一组表示布尔值、整数、浮点数和字符的基本内置类型。
类型 | 最小存储空间 |
---|---|
char(字符型) | 8位 |
wchar_t(宽字符型) | 16位 |
short(短整型) | 16位 |
int(整型) | 16位 |
long int(长整型) | 32位 |
float(单精度浮点型) | 6位有效数字 |
double(双精度浮点型) | 10位有效数字 |
long double(扩展精度浮点型) | 10位有效数字 |
bool(布尔型) | 无规定 |
sizeif()函数可以获得某种数据类型的具体大小。
还有一个void类型,不过不是用来表示具体数值的类型,void类型一般只用在函数定义中,表示函数没有返回值,或表示通用的指针类型,在后面的章节会有介绍。
1.1 整型
short、int和long int类型都是用来表示整数的整型。整数类型也分为有符号(signed)和无符号(unsigned)两种,可以通过声明signed int和unsigned int来区分。如果不指明的话,整型默认都是有符号的,int就代表signed int。
有符号的话,数字的第一位就表示符号,1为负,0为正,无符号数只能表示非负数,由于不需要第一位来区分正负,无符号数可以表示的正数范围会比有符号数多一倍。
//chapter 3_1
#include <iostream>
using namespace std;
// 整型的存储空间
int main()
{
cout << "short的存储空间为" << sizeof(short) << "字节。" << endl;
cout << "unsigned short的存储空间为" << sizeof(unsigned short)<< "字节。" << endl;
cout << "int的存储空间为" << sizeof(int) << "字节。" << endl;
cout << "unsigned int的存储空间为" << sizeof(unsigned int) << "字节。"<< endl;
cout << "long int的存储空间为" << sizeof(long int) << "字节。" << endl;
cout << "unsigned long int的存储空间为" << sizeof(unsigned long int) << "字节。" << endl;
return 0;
}
代码展示了当前编译器下各整形的存储空间,sizeof()函数返回了类型的字节数。
各整形的大小范围如表中所示。
类型 | 大小范围 |
---|---|
short | -32768~ 32767 |
int | -2147483648~2147483647 |
long int | -2147483648~2147483647 |
unsigned short | 0~65535 |
unsigned int | 0~4294967295 |
unsigned long int | 0~4294967295 |
以short型为例,看看如果输入数字超出数值类型大小范围会怎么样。
//chapter 3_2
#include <iostream>
using namespace std;
// 整数溢出
int main()
{
short a = -32769; // 比short型最小值小1
short b = 32768; // 比short型最大值大1
cout << "short下溢值:" << a << endl << "short上溢值:" << b << endl;
}
输出结果:
可以看到发生了溢出,最小值向下溢出了叫作下溢,会回到最大值。
最大值向上溢出了叫作上溢,会回到最小值。
1.2 字符型
有char和wchar_t两种类型。char的大小至少是1个字节,范围一般是-128~127。wchar_t是宽字符类型,至少是2个字节。
字符型也可以进行加减乘除的计算和其他操作,也可分为有符号和无符号。
区别在于:1、字符型是否有符号取决于编译器;2、有效范围内的字符型变量在打印的时候会被解读成字符而不是数字。
//chapter 3_3
#include <iostream>
using namespace std;
int main()
{
char a = 97;
char b = 2;
cout << "直接输出结果为:" << a << endl << "使用int函数转化为整型" << int(a) << endl;
// 计算a+b
cout << "直接输出结果为:" << a+b << endl << "使用char函数转化为字符型:" << char(a+b) << endl;
}
输出结果为:
从结果中可以看出,字符型变量直接打印出来会输出字符,而字符型变量相加会被转化为整型。
在ASCII编码系统中,“a”对应的值就是“97”,这也是为什么代码中把97赋值给变量a最后打印输出为字符a。
用代码打印ASCII编码系统的所有字符。
//chapter 3_4
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i < 128; i++)
{
char ch = i;
cout << i << " :" << ch <<" ";
// 每打印5个字符换一行
if (i % 5 == 0)
cout << endl;
}
return 0;
}
结果显示为:
由于有些字符是控制字符(0~31和127),导致输出结果乱码了,小问题,https://baike.baidu.com/item/ASCII 网址中有对ASCII编码系统的介绍。
1.3 浮点型
浮点型用来表示小数数据类型。
包括float、double和long double三种数据类型。
float需要保证有6位有效数字,double和long double都需要保证有10位有效数字。
//chapter 3_3
#include <iostream>
using namespace std;
// 浮点型的存储空间
int main()
{
cout << "float的存储空间为" << sizeof(float) << "字节。" << endl;
cout << "double的存储空间为" << sizeof(double) << "字节。" << endl;
cout << "long double的存储空间为" << sizeof(long double) << "字节。"<< endl;
return 0;
}
运行结果展示:
1.4 布尔型
布尔型bool的值只有true(真)和false(假)两种。将整数赋值给布尔类型,0会转换为False,非0则都转换为True。
//chapter 3_6
#include <iostream>
using namespace std;
// 浮点型的存储空间
int main()
{
cout << "bool的存储空间为" << sizeof(bool) << "字节。" << endl;
bool Flag1 = true;
bool Flag2 = false;
cout << "把true和false赋值给bool的结果为:" << Flag1 << "和" <<Flag2 << endl;
Flag1 = 2;
Flag2 = 0;
cout << "把2和0赋值给bool的结果为:" << Flag1 << "和" << Flag2 << endl;
cout << "之前两个bool值与1相加的结果为:" << Flag1 + 1 + Flag2<< endl;
return 0;
}
运行结果展示:
可以看到,打印输出的时候还是会打出1和0,而不是true和false。
最后一行运算代码 Flag1由于是布尔类型,所以值2自动转换为1,再与整型1相加,结果默认转换为整型2.
布尔型一般用于表示一段逻辑或关系表达式的结果。
2. 常量与变量
------------下次继续--------------