第二天 继续加油

这篇博客回顾了《明解C语言入门篇》7-13章节的重点,包括数据类型、位运算、函数宏等。同时介绍了NVMe协议的基础知识,如PCIe层次结构、中断方式、命令类型及NVMe的SQ、CQ和DB概念。强调了NVMe协议的高性能、低延迟和硬件简化特性。

第二天 《明解C语言入门篇》7-13章节 + NVMe协议PPT

今天把《明解C语言入门篇》的剩余7-13章节温习完了,需要注意的内容如下:
1、整数类数据类型包括:枚举型、字符型、整形三种。
2、C语言中将表示字符的char型的长度定义为1,使用sizeof运算符判断数据类型的长度。CHAR_BIT宏定义的长度在<limits.h>中。
3、typedef声明为已有的数据类型创建别名,typedef A B; 为数据类型A创建别名B。
4、逻辑位移不考虑符号位,所有二进制位都要进行位移,空位补0。算术位移会保留最高位的符号位,其余位进行位移,用符号位进行补位。
5、在定义函数宏时注意不要将空格插入宏名和“(”之间。
6、逗号运算符 a,b 按顺序判断a和b ,整个表达式最终生成b的判断结果。
7、在接受二维数组的形参的声明中,只有第一维的数组元素数可以省略。
8、表示对象地址的转换说明为%p。
9、数组名在大多数情况下被视为指向起始元素的指针,但在sizeof(数组名)会生成数组的整体长度,&数组名则是只想数组的整体的指针。
10、strlen函数返回字符串的长度不包含null字符。
11、.运算符和->运算符统称为访问运算符。
12、相同类型的结构体可以相互直接赋值。

NVMe协议

NVMe协议于2007年Intel开发者大会上被提出,全称为Non-Volatile Memory Express 非易失性存储器标准。具有两低一高一简的特性:延时、功耗低,传输性能高、硬件层简单。

1、PCIe 分为事务层(Transaction Layer)、数据链路层(Data link layer)、物理层(Physical layer)。
2、PCIe的中断方式必须支持MSI/MSI-x一种,还可以支持Legacy中断,提高兼容性。
3、NVMe的命令一共有13个,HOST管控命令(Admin Command)10个:Del/Crea I/O SQ、Del/Crea I/O CQ、Get log Page、idetify、set/get Feature、Asynchronous Event Request。HOST与SSD数据传输(IO Command)3个:flush 、w、r。
4、NVMe的三要素SQ(Submission Queue)CQ(Completion Queue)DQ(Doorbell Queue)。
5、ASQ与ACQ一对一关系,IOSQ和IOCQ可以多对一。SQ每个条目64个字节,CQ每个条目16个字节。
6、SQ、CQ位于HOST的内存中,DB在SSD的控制器内部并且与HOST的MEMORY有映射关系。
7、DB的主要功能记录SQ、CQ的头尾,还具有通知功能。
8、SQTDB-HOST生产者更新,CQHDB - HOST消费者更新。
9、SQHDB-SSD消费者更新,CQTDB-SSD生产者更新。
10、HOST在更新DB时会通知SSD相关信息。
11、NVMe有循环仲裁机制(Round Robin Arbitration)、加权循环仲裁机制(Weighted Round Robin Arbitration)。
12、RR主控必须支持,WRR主控选择性支持,RR ASQ与IOSQ具有同样高的优先级,按顺序分别取出一定数目的Commands。
13、WRR的优先级从高到低依次为ASQ、urgent calss、WRR class(H、M、L)。
14、在HOST与SSD数据传输时,SSD总是主动的一方。
15、NVMe的读写流程:
在这里插入图片描述
仅自己复习备用,图片很乱勿喷。

<think>题目要求根据连续做题天数n输出不同的鼓励语。规则如下: - 连续0到4天:输出"继续加油哦!" - 连续5到10天:输出"非常棒,继续加油哦!" - 连续11到99天:输出"实力不容小觑啊!" (注意:题目中连续11天以上,但示例中100天以上有特殊输出,所以11到99天输出这个) - 连续100天及以上:输出"能力爆表,全部通关!" 注意:题目中连续11天以上,但后面又提到连续100天以上,所以我们需要将100天以上单独处理。 输入n是一个非负整数(n < 2^31-1),所以我们需要考虑n的范围,但实际我们只需要判断四个区间。 我们可以使用if-else if结构来实现。 具体条件: if (n <= 4) -> 输出"继续加油哦!" else if (n >= 5 && n <= 10) -> 输出"非常棒,继续加油哦!" else if (n >= 11 && n <= 99) -> 输出"实力不容小觑啊!" else (n>=100) -> 输出"能力爆表,全部通关!" 注意:由于n是非负整数,所以不需要考虑负数的情况。 但是,题目中给出的区间是连续的,我们可以这样写: if (n <= 4) // 输出第一种 else if (n <= 10) // 因为n>=5且<=10,注意这里已经隐含了n>=5 // 输出第二种 else if (n <= 99) // 隐含了n>=11 // 输出第三种 else // 输出第四种 这样写更简洁。 代码实现如下:</think>### 连续学习天数鼓励程序 以下是解决该问题的C++代码实现: ```cpp #include <iostream> using namespace std; int main() { long long n; // 使用long long类型防止溢出 cin >> n; // 输入连续学习天数 if (n <= 4) { cout << "继续加油哦!"; } else if (n <= 10) { cout << "非常棒,继续加油哦!"; } else if (n < 100) { cout << "实力不容小觑啊!"; } else { cout << "能力爆表,全部通关!"; } return 0; } ``` ### 代码解释: 1. **输入处理**: ```cpp long long n; cin >> n; ``` 使用`long long`类型存储天数,因为题目说明`n < 2³¹-1`(即2147483646),`int`类型可能不足(在32位系统上) 2. **多级条件判断**: - `n <= 4`:输出"继续加油哦!" - `5 <= n <= 10`:输出"非常棒,继续加油哦!" - `11 <= n <= 99`:输出"实力不容小觑啊!" - `n >= 100`:输出"能力爆表,全部通关!" 3. **边界处理**: - 使用`else if`阶梯结构确保所有情况都被覆盖 - 最后一个`else`处理所有≥100的情况 ### 示例测试: - 输入`0` → 输出`继续加油哦!` - 输入`5` → 输出`非常棒,继续加油哦!` - 输入`11` → 输出`实力不容小觑啊!` - 输入`100` → 输出`能力爆表,全部通关!` ### 关键点: 1. **数据类型选择**:使用`long long`而非`int`确保大数值不会溢出 2. **条件顺序**:从最小范围开始判断,逐步扩大范围 3. **边界包含**: - `<=4`包含0-4天 - `<=10`包含5-10天 - `<100`包含11-99天 - `else`包含100天及以上 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值