云计算百科
云计算领域专业知识百科平台

算法竞赛C/C++:数据类型

Chapter 2:数据类型

一、数据类型

类型,是相似的数据所据拥有的共同特征
C++内简单数据类型:字符型,整型,浮点型,布尔类型

(1).字符型 char 

a.用单引号''表示字符,用双引号""表示字符串
b.ASCII编码
计算机中所有数据(包括字符)以二进制的形式存储,而ASCII码表中记录的就是每个字符的对应编码(128个)


其中:字符 A~Z 的ASCII码值从 65~90
      字符 a~z 的ASCII码值从 97~122
      对应的大小写字符(a和A)的ASCII码值的差值为 32
      数字字符 0~9 的ASCII码值从 48~57
      换行 \\n 的ASCII码值为 10
      ASCII码值从 0~31 这32个字符为不可打印字符,无法打印在屏幕上观察  

举例1:用ASCII编码打印对应字符

明确:一个字符的本质就是它的ASCII码值 

//用ASCII编码打印对应字符
#include <iostream>

using namespace std;

int main()
{
    char n = 65; //A的ASCII编码为 65 
    cout << n << endl; //屏幕上会打印出 A 
    return 0;
}

举例2:char类型变量只能接受单个字符

#include <iostream>
using namespace std;

int main()
{
    char n;
    cin >> n; // 输入 65 ,"65"属于两个字符 
    cout << n << endl; // 输出 6 ,而不是输出 ASCII编码65 对应的字符 A 
    // 因为 char类型 变量n 只能接受第一个字符 '6',所以输出结果为 6 
    return 0;
}

举例3:输入数字 65 得到字符 'A',需将变量改为int接收数字,再强制转换为char

#include <iostream>
using namespace std;   //standard标准  

int main()
{
    int n;
    cin >> n; // 输入 字符A 的 ASCII编码65 并用 int类型存储 
    char m = (char)n; //强制类型转换 
    cout << m << endl; // 输出字符A 
    return 0;
}

//endl 是输出流的操作符,只能用在 cout 后面,不能用 cin 后面 

(2).整型类型(整数)

 
在 C和C++ 中被分为四大类
short 短整型 
int 整型 
long 长整型 
long long  更长的整型 

#include <iostream>
#include <climits> // 包含整型范围的常量定义
using namespace std;

int main() {
    // 1. 查看各整型占用的字节数(内存大小)
    cout << "short 占用字节数:" << sizeof(short) << endl;
    cout << "int   占用字节数:" << sizeof(int) << endl;
    cout << "long  占用字节数:" << sizeof(long) << endl;
    cout << "long long 占用字节数:" << sizeof(long long) << endl;

    // 2. 查看各整型的数值范围
    cout << "short 范围:" << SHRT_MIN << " ~ " << SHRT_MAX << endl;
    cout << "int   范围:" << INT_MIN << " ~ " << INT_MAX << endl;
    cout << "long  范围:" << LONG_MIN << " ~ " << LONG_MAX << endl;
    cout << "long long 范围:" << LLONG_MIN << " ~ " << LLONG_MAX << endl;

    return 0;
}

运行结果:

C/C++ 的标准规定:sizeof(long) >= sizeof(int)

所以sizeof(long) 的计算结果可能是 4或8,取决于编译器

(3).浮点型(小数) 

在 C和C++ 中被分为三大类:
float 单精度浮点型 
double 双精度浮点型 
long double  长双精度浮点型 

flodt num = 5.5;    // 5.5 会被编译器识别为 double类型
float num = 5.5f;   // 5.5 会被编译器识别为 float类型

C/C++中小数书写形式:
3.14              编译器默认识别为 double类型
3.14f             编译器默认识别为 float类型
1e5               科学计数法表示形式,表1.0*10^5
1e5+10        100010
1.23e5+10   123010

(4).布尔类型(bool)

布尔类型变量的值为 true 或 false,用于表示真或假
在C/C++中,0表示假,非0表示真

bool flag = true;

二、signed 和 unsigned

signed(有符号的) 和 unsigned(无符号的) 关键字用于修饰字符型和整型类型

signed 表示一个类型带有正负号,包含负值
unsigned 表示一个类型不带有正负号,只能表示0和正整数

int n;
signed int n;
unsigned int n;

对于 整型类型 默认带有正负号,其signed可以省略,如 int == signed int
但是 char类型 的符号性取决于编译器,即 char 不一定等于 signed char
常见编译器中,char == signed char 

将变量声明为 unsigned,同样长度的内存能够表示的最大整数值 增大一倍 

//注意 unsigned的使用 对输入数据的存储造成的影响

#include <iostream>
using namespace std;

int main()
{
    unsigned int num = 10;
    cout << num << endl; //输出10 
    cin >> num; //输入 -5 
    cout << num << endl; //输出4294967291
    return 0;
 }

 

三、数据类型长度

(1). sizeof 操作符

sizeof 是一个关键字,也是操作符,专门用于计算特定数据类型的长度,单位是字节
sizeof操作符的 操作数可以是类型,也可以是变量名或表达式

用法:sizeof(操作数) 

当操作数不是类型,括号可以省略 

其计算结果为 size_t 类型,为无符号整数 

sizeof(char) –> 1字节 
sizeof(bool) –> 1字节  
sizeof(float) –> 4字节 
sizeof(double) –> 8字节 
sizeof(long double) –> 16字节

数据类型的长度决定了 由这个数据类型定义出来的变量能够存储的数值的大小

(2).各类型取值范围(重要)

整型类型:

类型 名称 内存占用 数值范围(以常见的 64 位系统为例)
short 短整型 2字节 -2¹⁵ ~ 2¹⁵ -1(大约为±10⁴)
int 整型 4字节 -2³¹ ~ 2³¹ -1(大约为±10⁹)
unsigned int 无符号整型 4字节 0 ~ 2³² -1
long 长整型 4/8字节 -2³¹ ~ 2³¹ -1(大约为±10⁹) / -2⁶³ ~ 2⁶³ -1(大约为±10¹⁸)
long long 更长的整型 8字节

-2⁶³ ~ 2⁶³ -1(大约为±10¹⁸)

C/C++ 的标准规定:sizeof(long) >= sizeof(int)

所以sizeof(long) 的计算结果可能是 4或8,取决于编译器

浮点数类型:

类型 名称 内存占用 数值范围(以常见的 64 位系统为例)
float 单精度浮点型 4字节

精度:6~7 位

有效数字范围:±10⁻³⁸ ~ ±10³⁸

double 双精度浮点型 8字节

精度:15~17 位

有效数字范围:±10⁻³⁰⁸~ ±10³⁰⁸

long double 长双精度浮点型 8/16字节

精度:至少 15 位有效数字(16 字节版本可达 18~19 位)

范围:±10⁻⁴⁹³² ~ ±10⁴⁹³²(16 字节版本)

  • “有效数字” 是核心:浮点数的 “精度” 不是 “小数位数”,而是全部数字的位数(比如float的123456.789只能精确到123456,后几位是近似值);

  • 内存与范围 / 精度的关系:内存越大,精度越高、表示的数值范围越广(double是日常最常用的,精度和范围远优于float);

  • long double 的特殊性:64 位系统中,Windows 通常和double一样占 8 字节,Linux/macOS 多为 16 字节,新手日常用double即可,无需刻意用long double;

  • 无符号浮点数:C/C++ 中浮点数没有 unsigned 版本,默认都能表示正负值

(3).typeof 关键字

用途:给类型重命名,简化类型
用法:typedef 原类型名 新类型名; 

赞(0)
未经允许不得转载:网硕互联帮助中心 » 算法竞赛C/C++:数据类型
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!