IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 《C++ Primer》学习笔记2.1 -> 正文阅读

[C++知识库]《C++ Primer》学习笔记2.1

知识点

一、
C++定义了一套包括算术类型和空类型(void)在内的基本数据类型。

二、
算术类型分为两类:整型(integral type,包括字符和布尔类型在内)和浮点型。

三、
大多数机器的字节由8比特构成,字则由32(4×8)或64(8×8)比特构成,也就是4或8字节。

四、
除去布尔值和扩展的字符型之外,其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种。

五、
字符型被分为了三种:char、signed char、unsigned char。类型char实际上会表现为上述两种形式中的一种,具体是哪种由编译器决定。

六、
当明确知晓数值不可能为负时,选用无符号类型;执行浮点数运算选用double。

七、
当我们把一个非布尔类型的算术值赋给布尔类型时,初始值为false则结果为0,初始值为true则结果为1。
当我们把一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1。
当我们把一个浮点数赋给整数类型时,进行了近似处理。结果值将仅保留浮点数中小数点之前的部分。
当我们把一个整数值赋给浮点类型时,小数部分记为0.如果该整数所占的空间超过了浮点类型的容量,精度可能有损失。
当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。 例如,8比特大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际的结果是该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char所得的结果是255。
当我们赋值给符号类型一个超出它表示范围的值时,结果是未定义的。 此时,程序可能继续工作、可能崩溃,也可能生成垃圾数据。

八、
当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。把int转换成无符号数的过程和把int直接赋给无符号变量一样。

九、
以0开头的整数代表八进制数,以0x和0X开头的代表十六进制数。默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。

十、
浮点型字面值是一个double。

十一、
编译器在给每个字符串的结尾处添加一个空字符(‘\0’),因此,字符串字面值的实际长度要比它的内容多1。

十二、
如果反斜线\后面跟着的八进制数字超过3个,只有前3个数字与\构成转义序列。相反,\x要用到后面跟着的所有数字。

十三、

前缀含义类型
uUnicode 16字符char16_t
UUnicode 32字符char32_t
L宽字符wchar_t
u8UTF-8(仅用于字符串字面常量)char

练习题

在这里插入图片描述
2.1.1节练习

练习2.1:

类型int、long、long long和 short 的区别是什么?无符号类型和带符号类型的区别是什么? float和 double的区别是什么?

int、long、long long 和short都属于整型,但是其尺寸的最小值不同。short 是短整型,占16位;int是整型,占16位;long 和long long均为长整型,均为长整形,分别占32位和64位。大多数整型都可以划分为无符号类型和带符号类型,在无符号类型中所有比特都用来存储数值,但是仅能表示大于等于0的值;带符号类型则可以表示正数、负数或0。float 和 double 分别是单精度浮点数和双精度浮点数,区别主要是在内存中所占的比特数不同,以及默认规定的有效位数不同。

练习2.2:

计算按揭贷款时,对于利率、本金和付款分别应选择何种数据类型?说明你的理由。
在实际应用中,利率、本金和付款为实数。因此应该选择一种浮点类型来表示。在三种可供选择的浮点类型 float、double和long double 中,float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。long double提供的精度在一般情况下是没有必要的,况且它带来的运行时消耗也不容忽视。综上所述,我认为double类型更合适。

在这里插入图片描述
2.1.2节练习

练习2.3:

读程序写结果。
unsigned u = 10, u2 = 42;
std::cout << u2 - u << std::endl;
std::cout << u - u2 << std::endl;

int i = 10, i2 = 42;
std::cout << i2 - i << std::endl;
std::cout << i - i2 << std::endl;
std::cout << i - u << std::endl;
std::cout << u - i << std::endl;

std::cout << u2 - u << std::endl; // 32
std::cout << u - u2 << std::endl; // 取模后的值
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
练习2.4:编写程序检查你的估计是否正确,如果不正确,请仔细研读本节直到弄明白问题所在。
在这里插入图片描述

#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.1.3节练习

练习2.5:

指出下述字面值的数据类型并说明每一组内几种字面值的区别;
(a)‘a’,L’a’,“a”,L"a"
(b)10,10u,10L,10uL,012,0xC
(c)3.14,3.14f,3.14L
(d)10,10u,10.,10e-2

(a)‘a’-【字符型字面值】,L’a’-【宽字符型字面值,类型是wchar_t】,“a”-【字符串型字面值】,L"a"-【宽字符串型字面值】
(b)10-【十进制整型字面值】,10u-【无符号整型字面值,类型是unsigned】,10L-【长整型字面值,类型是long】,10uL-【无符号长整型字面值,类型是unsigned long】,012-【八进制整型字面值】,0xC-【十六进制整型字面值】
(c)3.14-【浮点型字面值】,3.14f-【单精度浮点型字面值,类型是float】,3.14L-【扩展精度浮点型字面值,类型是long double】。
(d)10-【十进制整型字面值】,10u-【无符号整型字面值,类型是unsigned】,10.【浮点型字面值】,10e-2【浮点型字面值】

练习2.6:

下面两组定义是否有区别,如果有,请叙述之:
int month = 9,day = 7;
int month = 09,day = 07;

有区别,以0开头的整数代表八进制数。
所以,int month = 9,day = 7; 正确,其中9和7为十进制数,正确。而int month = 09,day = 07; 错误,其中9和7为八进制数,而八进制数中不可能出现超过7的数字。

练习2.7:

下述字面值表示何种含义?它们各自的数据类型是什么?
(a)“who goes with F\145rgus?\012”
(b)3.14e1L
(c)1024f
(d)3.14L

(a)含义:“who goes with Fergus?”,数据类型:字符串型
(b)含义:31.4,数据类型:扩展精度浮点型
(c)含义 :1024.0 ,数据类型:单精度浮点型
(d)含义:3.14 ,数据类型:扩展精度浮点型

练习2.8:

请利用转义序列编写一段程序,要求先输出2M,然后转到新一行。修改程序使其先输出2,然后输出制表符,再输出M,最后转到新一行。
在这里插入图片描述

#include <iostream>

int main()
{
	std::cout << "2M\n";
	std::cout << "2\tM\n";
	return 0;
}

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:41:58  更:2022-04-23 10:42:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:11:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码