C++ 规定在创建一个变量或常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。
一、整型
作用:整型变量表示的是整数类型的数据。
C++ 中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同。
注意:不同系统会有所差异,一字节为 8 位。
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short | 2个字节 | -32768 到 32767 |
int | 4个字节 | -2147483648 到 2147483647 |
long | Windows 为4个字节,Linux 为4个字节(32位),8字节(64位) | -2147483648 到 2147483647 |
long long | 8个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
sizeof 关键字
作用:利用 sizeof 关键字可以统计数据类型所占内存大小。
语法:sizeof(数据类型 / 变量)
示例:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
// short
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << " short 的最大值: " << (numeric_limits<short>::max)() << " ,short 的最小值:" << (numeric_limits<short>::min)() << endl;
// int
cout << "int: \t\t" << "所占字节数:" << sizeof(int);
cout << " int 的最大值: " << (numeric_limits<int>::max)() << " ,int 的最小值:" << (numeric_limits<int>::min)() << endl;
// long
cout << "long: \t\t" << "所占字节数:" << sizeof(long);
cout << " long 的最大值: " << (numeric_limits<long>::max)() << " ,long 的最小值:" << (numeric_limits<long>::min)() << endl;
// long long
cout << "long long: \t\t" << "所占字节数:" << sizeof(long long);
cout << " long long 的最大值: " << (numeric_limits<long long>::max)() << " ,long long 的最小值:" << (numeric_limits<long long>::min)() << endl;
return 0;
}
二、实型(浮点型)
作用:用来表示小数
浮点型变量分为两种:
- 单精度 float;
- 双精度 double。
两者的区别在于表示的有效数字范围不同
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15-16位有效数字 |
示例:
#include <iostream>
using namespace std;
int main()
{
// float
float a = 3.14f;
cout << "float: \t\t" << "所占字节数:" << sizeof(a) << endl;
// double
double d1 = 3.14;
cout << "double: \t\t" << "所占字节数:" << sizeof(double) << endl;
// 科学计数法
float f1 = 4e2; // 4 * 10 ^ 2 ,结果为400;
cout << "f1 = " << f1 << endl;
float f2 = 4e-2; // 4 * 0.1 ^ 2 ,结果为0.04;
cout << "f2 = " << f2 << endl;
return 0;
}
三、字符型
作用:字符型变量用来显示单个字符,所占 1 个字节。
语法:char ch = 'A';
注意:
- 在显示字符型变量时,用单引号将字符括起来,不要用双引号;
- 单引号内只能有一个字符,不可以是字符串。
- 字符型变量对应的ASCII编码: a - 97,A - 65
四、字符串型
C++ 提供了以下两种类型的字符串表示形式:
- C 风格字符串
- C++ 引入的 string 类类型
4.1 C 风格字符串
语法:char 变量名[ ] = "字符串值";
示例:
int main()
{
char str1[] = "Hello Kevin";
cout << str1 << endl;
return 0;
}
注意:
- 变量名后面需要加[ ] ;
- 字符串要用双引号括起来。
4.2 C++ 引入的 string 类类型
语法:string 变量名 = "字符串值";
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "Hello Kevin";
cout << str << endl;
return 0;
}
注意:需要加入头文件
#include <string>
五、布尔类型(bool)
作用:布尔数据类型代表真或假的值,常用于条件判断,占1个字节。
bool 类型只有两个值:
- true ---- 真(本质是1)
- false ---- 假(本质是0)
六、类型转换
C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。
6.1 静态转换(Static Cast)
作用:将一种数据类型的值强制转换为另一种数据类型的值。例如:将 int 类型转换为 char 类型。
示例:
int main()
{
//int 转 char
int a = 95;
char c = static_cast<char>(a);
cout << c << endl;
return 0;
}
6.2 动态转换(Dynamic Cast)
作用:只用于类继承结构中基类和派生类之间指针或引用的转换,可以进行向上、向下,或者横向的转换。
示例:
int main()
{
struct B { virtual void test() {} };
struct D1 : virtual B { };
struct D2 : virtual B { };
struct MD : D1, D2 { };
D1* pd1 = new MD();
cout << pd1 << endl;
// 向上转型
B* pb = dynamic_cast<B*>(pd1);
cout << pb << endl;
// 向下转型
MD* pmd = dynamic_cast<MD*>(pd1);
cout << pmd << endl;
// 横向转型
D2* pd2 = dynamic_cast<D2*>(pd1);
cout << pd2 << endl;
return 0;
}
6.3 常量转换(Const Cast)
作用:不能去除变量的常量性,只能用来去除指向常数对象的指针或引用的常量性,且去除常量性的对象必须为指针或引用。
示例:
int main()
{
const int val = 6;
cout << "&val=" << &val << ", val=" << val << endl;
const int* cp = &val;
int* p = const_cast<int*>(cp);
*p = 2;
cout << "&val=" << &val << ", val=" << val << endl;
cout << "p=" << p << ", *p=" << *p << endl;
return 0;
}
6.4 重新解释转换(Reinterpret Cast)
作用:将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。文章来源:https://www.toymoban.com/news/detail-448700.html
示例:将地址转换成整数文章来源地址https://www.toymoban.com/news/detail-448700.html
int main()
{
struct B { int val; };
B b{ 101 };
cout << "&b=" << &b << endl;
long addr = reinterpret_cast<long>(&b);
cout << "addr=" << addr << endl;
return 0;
}
到了这里,关于【C++ 入坑指南】(05)数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!