【C++ Primer 第五版】基本内置类型

1 C++语法特征简述

理解语法特征的实现细节是学习并掌握编程语言的第一步
最基本的特征包括:

  • 整型、字符串等内置类型
  • 变量,用来为对象命名
  • 表达式和语句,用于操作上述数据类型的具体值
  • if或while等控制结构,这些结构允许我们有选择性地执行一些语句或重复地执行一些语句
  • 函数,用于定义可供随时调用的计算单元

大多数语言可自定义数据类型进行扩展,并将有用的功能进行封装为库函数
Python是在程序运行时检测数据类型,而C++是一种静态数据类型语言,在编译过程中就进行检查,编译器直到程序每个变量对应的数据类型
C++提供基本的内置数据类型,而且其显著的语法特征是类
新类型既可以包含数据成员,也可以包含函数成员
C++标准库就有丰富的类和函数

数据类型是程序的基础,C++支持的基本内置类型包括字符、整型、浮点数等,标准库还好办可编程字符串和向量等

C++包含算术类型和空类型(void),算术类型包含字符、整型数、布尔值和浮点数,空类型不对应具体值,常用于函数不返回任何值的时候

2 算术类型

算术类型分为两类,整型(包含字符和布尔类型)和浮点型

  • bool,布尔类型,取值位true或false
  • char,字符,最小尺寸8位,正好1个机器字节
  • wchar_t,宽字符,最小尺寸16位
  • char16_t,Unicode字符,最小尺寸16位
  • char32_t,Unicode字符,最小尺寸32位
  • short,短整型,最小尺寸16位
  • int,整型,,最小尺寸16位
  • long,长整型,最小尺寸32位
  • long long,长整型,最小尺寸64位
  • float,单精度浮点数,6位有效数字
  • double,双精度浮点数,10位有效数字
  • long double,双精度浮点数,10位有效数字

字节byte是可寻址的最小内存块,字word是存储的基本单元,通常由几个字节组成,大多数机器的字节是8bite构成
内存中的每个字节与一个数字(地址/address)对应

除了bool之外的整型都是可以带符号的,而在类型名前添加unsigned可得到无符号类型

字符型可分为char、unsigned char、signed char
知晓数值不能为负,则使用无符号类型
short太小,int和long一般一样大,超过int建议选用long long
算术表达式不使用char和bool
浮点计算一般选用double,float通常精度不够且计算代价与double类似

2.1.1 练习

  • 2.1 int,long,long long和short的区别是什么?无符号类型和带符号类型的区别?float和double的区别?
    4中整型的区别在于尺寸,所能表示的数字范围不同;无符号类型只能表示非负数;float精度比double低
  • 2.2 计算按揭贷款,利率、本金和付款选择的数据类型
    由于金额是浮点数,所以可以选择float或double,为了精度保证,优先选择double

3 类型转换

从一种类型到另外一种类型的转换,程序有时会自动转换

bool b = 42;           // b为真
int i = b;             // i的值为1
i = 3.14;              // i为值为3
double pi = i;         // pi的值为3.0
unsigned char c = -1;  // 若char占8比特,则c的值为255
signed char c2 = 256;  // 若char占8比特,则c的值是为定义的

bool赋值0时结果为false,否则结果为true
超出范围可能报错或产生垃圾数据但不会终止程序
无符号类型不能赋值负数,不要混用带符号和无符号类型

练习

  • 2.3 读程序写结果
#include <iostream>
int main()
{
    unsigned u = 10, u2 = 42;
    std::cout << u2 - u << std::endl; // 32
    std::cout << u - u2 << std::endl; // 异常值

    int i = 10, i2 = 42;
    std::cout << i2 - i << std::endl; // 32
    std::cout << i - i2 << std::endl; // -32
    std::cout << i - u << std::endl; // 0
    std::cout << u - i << std::endl; // 0
    
    return 0;
}
  • 2.4 略

4 字面值

0x或0X表示十六进制数
浮点型字面值时一个double,指数用e或E标识
单引号标识一个字符时char型字面值

双引号里的0个或多个字符构成字符串型字面值
每个字符串结尾添加一个空字符(’\0’),实际长度+1
如果两个字符串仅有空格、缩进和换行符分隔,则实际是一个整体
true和false时bool字面值
nullptr时指针字面值

5 转义序列

转义序列均以反斜线开始,包括:

  • 换行符\n
  • 横向制表符\t
  • 报警符\a
  • 纵向制表符\v
  • 退格符\b
  • 双引号"
  • 反斜线\
  • 问号?
  • 单引号’
  • 回车符\r
  • 进纸符\f
    转义序列当作一个字符使用
    \x后紧跟一个或多个十六进制数字,或者\后紧跟1个、2个或3个八进制数字,都可以标识转义序列

6 制定字面值的类型

可以通过前缀和后缀来制定字面值类型
前缀包含u–char16_t,U–char32_t,L–wchar_t,u8–char
后缀包括u/U–unsigned,l/L–long,ll/LL–long long,f/F–float,l/L–long double

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值