C++ 学习笔记一

C++ 学习笔记

  1. 使用空参数列表而不是void来指示函数没有参数。
  2. 现代机器上的内存通常被组织成字节大小的单元,每个内存字节都有一个唯一的地址。
  3. 为了确定特定机器上数据类型的大小,C++ 提供了一个名为sizeof的运算符。sizeof运算符是一个一元运算符,它接受类型或变量作为参数,并返回其大小(以字节为单位)。您还可以sizeof在变量名上使用运算符。
  4. C++ 有4 种主要基本整数类型
类型最小尺寸
short int16 bit
int32 bit
long int32 bit
long long int64bit
  1. signed short a;//定义有符号a,但其实多余,默认为有符号
  2. 当对两个整数进行除法运算(称为整数除法)时,C++ 总是产生整数结果。由于整数不能包含小数,因此小数部分将被直接丢弃(不进行四舍五入!)。
  3. 如果无符号值超出范围,则将其除以比该类型最大数字大一的数字,并且只保留余数。任何大于该类型可表示的最大数字的数字都会简单地“回绕”(有时称为“模回绕”)。
  4. 在保存数量(即使数量应该是非负的)和数学运算时,优先使用有符号数而不是无符号数。避免混合使用有符号数和无符号数。
  5. 固定宽度的整数(#include<cstdint>),保证在任何体系结构上具有相同的大小。
nametyperange
std::int8_t1 字节有符号-128 至 127 在许多系统上被视为有符号字符。请参阅下面的注释。
std::uint8_t1 字节无符号0 至 255 在许多系统上被视为无符号字符。请参阅下面的注释。
std::int16_t2字节有符号-32,768 至 32,767
std::uint16_t2字节无符号0 至 65,535
std::int32_t4字节有符号-2,147,483,648 至 2,147,483,647
std::uint32_t4 字节无符号0 至 4,294,967,295
std::int64_t8 字节有符号-9,223,372,036,854,775,808 至 9,223,372,036,854,775,807
  1. 如果您使用固定宽度的整数,在某些体系结构上,它可能比更宽的类型慢。例如,如果您需要一个保证为 32 位的整数,您可能会决定使用std::int32_t,但您的 CPU 在处理 64 位整数时实际上可能更快。但是,仅仅因为您的 CPU 可以更快地处理给定类型并不意味着您的程序总体上会更快——现代程序通常受内存使用量而不是 CPU 的限制,更大的内存占用可能会比更快的 CPU 处理加速您的程序更慢。
  2. 快速和最小整数
  • 快速类型:(std::int_fast#_t 和 std::uint_fast#_t)提供最快的有符号/无符号整数类型,宽度至少为 # 位(其中 # = 8、16、32 或 64)。例如,std::int_fast32_t将为您提供最快的有符号整数类型,宽度至少为 32 位。最快是指 CPU 可以最快处理的整数类型。
  • 最小类型:std::int_least#_t 和 std::uint_least#_t)提供宽度至少为 # 位(其中 # = 8、16、32 或 64)的最小有符号/无符号整数类型。例如,std::uint_least32_t将为您提供宽度至少为 32 位的最小无符号整数类型。
#include <cstdint> // for fast and least types
#include <iostream>

int main()
{
	std::cout << "least 8:  " << sizeof(std::int_least8_t) * 8 << " bits\n";
	std::cout << "least 16: " << sizeof(std::int_least16_t) * 8 << " bits\n";
	std::cout << "least 32: " << sizeof(std::int_least32_t) * 8 << " bits\n";
	std::cout << '\n';
	std::cout << "fast 8:  " << sizeof(std::int_fast8_t) * 8 << " bits\n";
	std::cout << "fast 16: " << sizeof(std::int_fast16_t) * 8 << " bits\n";
	std::cout << "fast 32: " << sizeof(std::int_fast32_t) * 8 << " bits\n";

	return 0;
}
  • 缺点
    首先,实际上使用它们的程序员并不多,而且不熟悉可能会导致错误。其次,快速类型可能会导致内存浪费,因为它们的实际大小可能大于其名称所指示的大小。更严重的是,由于快速/最小整数的大小可能会有所不同,因此您的程序可能会在它们解析为不同大小的体系结构上表现出不同的行为。
  1. 科学计数法
  • 由于在 C++ 中输入或显示指数可能很困难,我们使用字母“e”(有时为“E”)来表示等式的“乘以 10 的幂”部分。例如,1.2 x 10⁴将写为1.2e4,而5.9722 x 10²⁴将写为5.9722e24。

  • 对于小于 1 的数,指数可以为负数。该数5e-2相当于5 * 10⁻²,即5 / 10²,或0.05。电子的质量为9.1093837e-31 kg。

  1. 有效数字
  • 有效数字(e 之前的部分)中的数字称为有效数字(或有效数字)。有效数字越多,数字越精确。3.14159可以写为3.14159e0。由于有效数字有 6 个数字,因此该数字有 6 个有效数字。
  1. 浮点数
  • 浮点数据类型始终是有符号的(可以保存正值和负值)。
类型typical size
float4 bytes
double8bytes
long double8,12,16bytes
  • 使用浮点文字时,始终至少包含一位小数(即使小数为 0)。这有助于编译器理解该数字是浮点数,而不是整数。
int a { 5 };      // 5 means integer
double b { 5.0 }; // 5.0是一个浮点字面值(默认情况下没有后缀意味着双精度类型)
float c { 5.0f }; // 5.0是浮点文字,后缀f表示浮点类型

int d { 0 }       // 0 is an integer
double e { 0.0 }  // 0.0 is a double

示例

#include <iostream>

int main()
{
	std::cout << 5.0 << '\n';
	std::cout << 6.7f << '\n';
	std::cout << 9876543.21 << '\n';

	return 0;
}


输出结果

5
6.7
9.87654e+06

  • 输出浮点数时,std::cout默认精度为 6 , 也就是说,它假定所有浮点变量都只有 6 位数字(浮点数的最小精度),因此它将截断此后的任何内容。
  • 浮点数有两种特殊类别。第一种是Inf,表示无穷大。Inf 可以是正数或负数。第二种是NaN,代表“非数字”。
  1. 布尔值
  • 布尔变量是只能具有两个可能值的变量:true和false。
bool b1 { true };
bool b2 { false };
b1 = false;
bool b3 {}; // default initialize to false
  • 布尔值实际上并不以单词“true”或“false”的形式存储在布尔变量中。相反,它们被存储为整数:true变为整数1,false变为整数0。同样,当布尔值被求值时,它们实际上并不是求值为“true”或“false”。它们求值为整数0(false)或1(true)。因为布尔值实际上存储的是整数,所以它们被认为是整数类型。
如果你希望 std::cout 打印“true”或“false”而不是 01,则可以使用std::boolalpha。
#include <iostream>

int main()
{
    std::cout << true << '\n';
    std::cout << false << '\n';

    std::cout << std::boolalpha; // print bools as true or false

    std::cout << true << '\n';
    std::cout << false << '\n';
    return 0;
}

您可以使用std::noboolalpha将其关闭。
为了允许std::cin接受“false”和“true”作为输入,必须启用std::boolalpha选项
  1. 当使用 std::cout 打印字符时,std::cout 将 char 变量输出为 ASCII 字符
  • 默认情况下,小数部分为 0 的浮点值打印时不带小数位(例如5.0打印为5)。
  • 某些类型转换始终是安全的(例如转换int为double),而其他类型转换可能会导致转换过程中值发生变化(例如转换double为int)。不安全的隐式转换通常会生成编译器警告,或者(在括号初始化的情况下)生成错误。这是括号初始化是首选初始化形式的主要原因之一。括号初始化将确保我们不会尝试使用在隐式类型转换时会丢失值的初始化器来初始化变量
  1. static_cast 运算符进行显式类型转换static_cast<新类型>(表达式)
  • 只要您看到 C++ 语法(不包括预处理器)使用尖括号 (<>),尖括号之间的内容很可能是类型。这通常是 C++ 处理需要参数化类型的代码的方式。
#include <iostream>

void print(int x)
{
	std::cout << x << '\n';
}

int main()
{
	print( static_cast<int>(5.5) ); // explicitly convert double value 5.5 to an int

	return 0;
}
-------------------------------------------
#include <iostream>

int main()
{
    char ch{ 97 }; // 97 is ASCII code for 'a'
    std::cout << ch << " has value " << static_cast<int>(ch) << '\n'; // print value of variable ch as an int

    return 0;
}
值得注意的是,static_cast的参数求值为表达式。当我们传入一个变量时,该变量将被求值以产生其值,然后该值将转换
为新类型。变量本身不会受到将其值转换为新类型的影响。在上述情况下,变量ch仍然是 char,即使我们将其值转换为
 ,它仍保持相同的值int

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/772895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 3D 建模库在 C# 中将 3DS 转换为 USDZ?

USDZ/USD是一种 3D 文件格式&#xff0c;被广泛用于跨平台共享 3D 资产。另一方面&#xff0c;3DS是另一种以块形式存储数据的 3D 文件格式。在某些情况下&#xff0c;您需要将3DS 文件转换为 USDZ/USD文件格式。因此&#xff0c;本篇博文介绍了一个功能丰富的3D 建模库&#x…

记录一下简单导入导出excel二级表头

数据库导入导出表头 之前的工具类GenerateExcelToFile新增两个导出这种二级表头方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

《Winodws API每日一练》8.2 static控件

在 Windows 编程中&#xff0c;"Static" 控件是一种常见的用户界面元素&#xff0c;用于显示静态文本或图像&#xff0c;而无法进行用户交互。它通常用于显示标签、标题、说明文本或静态图像等信息。Static 控件是一种静态的、只读的显示元素&#xff0c;不接受用户的…

JAVA 快递100wms工具类

快递wms工具类 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.kuaidi100.sdk.api.QueryTrack; import com.kuaidi100.sdk.api.Subscribe; import com.kuaidi100.sdk.contant.ApiInfoConstant; import c…

11.SQL注入-盲注基于(base on boolian)

SQL注入-盲注基于boolian案例利用 首先总结一下sql语句中的函数意思 #查看当前所在的数据库 mysql> select database(); ------------ | database() | ------------ | pikachu | ------------ 1 row in set (0.00 sec)#函数substr里1是从第几位开始取字符&#xff0c;2…

mybatis-使用自动生成(根据数据库反向生成pojo、映射文件,映射接口)

1.在pom.xml中导入依赖和插件 <dependencies> <!-- 导入自动生成依赖--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.0</version>&…

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …

go开源webssh终端源码main.go分析

1.地址: https://github.com/Jrohy/webssh.git 2.添加中文注释地址: https://github.com/tonyimax/webssh_cn.git main.go分析 主包名&#xff1a;main package main //主包名 依赖包加载 //导入依赖包 import ("embed" //可执行文件…

密码学复习

目录 基础 欧拉函数 欧拉函数φ(n)定义 计算方法的技巧 当a=a_1*a_2*……*a_n时 欧拉定理 剩余系 一些超简单密码 维吉尼亚 密钥fox 凯撒(直接偏移) 凯特巴氏(颠倒字母表) 摩斯密码(字母对应电荷线) 希尔(hill)密码 一些攻击 RSA 求uf+vg=1 快速幂模m^…

苹果获得OpenAI董事会观察员职位、Runway最新估值40亿美元

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 据知情人士透露&#xff0c;苹果应用商店&#xff08;App Store&#xff09;负责人、前营销主管Phil Schiller被选中担任这一职位。这位知情人士说&#xff0c;作为董事会观察员&#xff0c;他不会以正…

二次搭建无人车平台遇到的问题(mid360+joy游戏手柄操纵无人车)

joy节点启动 报错&#xff1a; ROS path [0]/opt/ros/noetic/share/ros ROS path [1]/home/jetson/yahboomcar_ws/src/yahboomcar_autodrive ROS path [2]/home/jetson/yahboomcar_ws/src/yahboomcar_bringup ROS path [3]/home/jetson/yahboomcar_ws/src/yahboomcar_ctrl ROS…

【2024版】Microsoft Azure 管理员培训课程招生简章(8月有开班)

课程介绍 本课程专为希望深入了解和精通Microsoft Azure管理的IT专业人员设计。在为期三天的培训中&#xff0c;学员将全面学习如何管理Azure订阅&#xff0c;保护标识&#xff0c;配置虚拟网络&#xff0c;以及实现存储解决方案和虚拟机。此外&#xff0c;课程还涵盖了实现We…

传感器标定(一)摄像头内参标定

一、使用ROS进行手动标定安装 1、安装 image-view &usb_cam ⽤于驱动相机 sudo apt-get install ros-melodic-image-view sudo apt-get install ros-melodic-usb-cam2、查看系统视频设备 v4l2- ctl -d /dev/video0 --all 查询所有相机具体的参数包括width和height ls /…

Excel数据截取及合并多行多列数据

公式一&#xff1a;RIGHT(A2,LEN(A2)-FINDB(")",A2)) 公式二&#xff1a;PHONETIC(C2:D19) 详情可以看附件。

JMeter--定时执行的方法

原文网址&#xff1a;JMeter--定时执行的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍JMeter如何使用定时器定时执行测试任务。 Java技术星球&#xff1a;way2j.com 方法 第一步&#xff1a;新建定时器 右键测试任务> Add > Timer> Constant Timer 如下图所示…

【python数据处理】— “2020-01-01 05:20:15“日期格式数据

文章目录 一、数据说明及目标二、实现方式1.提取date2.提取hour3.提取weekday4.提取month 一、数据说明及目标 数据说明 数据表有一列名为"datetime"表示时间数据&#xff0c;该列的数据格式是"2020-01-01 05:20:15"。 import pandas as pd datapd.read_e…

云动态摘要 2024-07-04

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起&#xff01; [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

搜维尔科技:【研究】Scalefit人体工程学测量系统为预防肌肉骨骼疾病提供生物力学分析

与工作相关的肌肉骨骼疾病(MSE)是工作生活中的一个持续的伴侣。总部位于科隆的Scaleit公司生产的移动生物力学测量系统Industrial Athlete有助于在工作场所立即发现疾病&#xff0c;伤害和损伤的原因。 Scalefit是一个跨学科网络的一部分&#xff0c;在德国科隆体育大学和职业…

【CT】LeetCode手撕—232. 用栈实现队列

目录 题目1- 思路2- 实现⭐232. 用栈实现队列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;232. 用栈实现队列 1- 思路 思路 ① 用两个栈来实现队列&#xff0c;一个 in 入栈 和一个 out 出栈② push 入队&#xff1a;入栈逻辑&#xff1a;即将元素加入到 in 栈 里即…

spring6框架解析(by尚硅谷)

文章目录 spring61. 一些基本的概念、优势2. 入门案例实现maven聚合工程创建步骤分析实现过程 3. IoC&#xff08;Inversion of Control&#xff09;基于xml的bean环境搭建获取bean获取接口创建实现类依赖注入 setter注入 和 构造器注入原生方式的setter注入原生方式的构造器注…