首页 > 编程语言 >《C++ Primer Plus》学习day3

《C++ Primer Plus》学习day3

时间:2024-09-10 23:50:45浏览次数:14  
标签:转换 符号 int float day3 char Plus 类型 Primer

C++11新增的内容:char16_t和char32_t

  • char16_t:
    • 无符号,16位,使用前缀u表示char_16字符常量和字符串常量;
  • char32_t:
    • 无符号,32位,使用前缀U表示char32_t常量

浮点类型

C++有三种浮点类型:float、double、long double

头文件cfloat中对对浮点数进行了限制:
比如最低有效位数、表示尾数的位数和最大和最小的指数值~
在这里插入图片描述
超过有效位数,显示的数据可能就不精确了(比如上图中的系统限制float的有效位数为6,如果终端显示的数字超过6位,就会产生错误)

浮点常量的存储:默认情况下,像8.24和2.4E8这样的浮点常量都属于double类型.
如果希望存储为float类型,在常量后面添加f或F后缀;如果希望存储为long double类型,可使用l或L后缀

浮点数运算的速度通常要比整数运算慢
在这里插入图片描述
cfloat头文件中定义的float有效位数为6(自己尝试去找了一下,看了一下头文件,不要觉得头文件是神秘的东西,多去看)

#include <iostream>
#include <cfloat>

int main()
{
	using namespace std;
	//先看一下系统中规定的float类型的有效位数
	cout << "the significiant digits of (float) is " << FLT_DIG << endl;

	//精度降低的示例
	cout.setf(ios_base::fixed,ios_base::floatfield);//迫使输出使用定点表示法
	float a = 2.34E+22f;
	float b = a + 1.0f;//默认存储为double,这里需要float,需要使用f后缀
	cout << "a=" << a << endl;
	cout << "b-a=" << b - a << endl;
	return 0;
}

在这里插入图片描述
如上图,有效位数为6,下面一行输出也表明,a的值从第七位开始就开始出错,而前六位是正确的。
b-a的值正确应该为1(末尾位加一),但是由于float只能表示前六位或前七位,修改末尾位对这个数没有影响。

除法

两个操作数都是整数时,结果为整数;只要有一个操作数为浮点数,结果就是浮点数。
对不同类型进行运算时,C++将他们全部转换为同一类型

以{}方式进行初始化时的类型转换

这种初始化的方式对于类型转换比较严格。不允许缩窄(我的理解是大的不能转换为小的)。比如
int x=66;
char c = {x};
在编译器看来,char类型容不下int类型,所以不允许转换。
但是
x=36325
char c = x
这样通常的初始化是允许的,但是会超出目标类型的取值范围,通常只取右边的字节,会损失精度。

表达式中的类型转换

  1. 在计算表达式时,C++会将bool、char、unsigned char、signed char和short转换为int类型!(整型提升
    • short s1;
    • short s2;
    • short s3 = s1 + s2;
    • 在计算s3时,会将s1和s2转换为int类型,然后再将结果转换为short类型(因为结果被赋给一个short变量)
  2. 当不同类型进行算术运算,也会进行转换。
    • 会将小的转换为大的(如int和float进行运算,int被转换为float)
    • 如果一个操作数为有符号的,另一个为无符号的,且无符号的级别高于有符号的级别,则将有符号的转换为无符号所属的类型。
    • 如果有符号的类型能表示无符号类型的所有可能取值,则将无符号操作数转换为有符号的类型
    • 否则,将两个转换为有符号所属类型的无符号版本

上述转换只考虑等号右边的操作数,与左边结果变量的类型无关~

auto声明(自动判断类型)

auto x = 123.1;,这样x是int类型,使用auto声明不指定变量的类型,编译器将变量的类型设置为与初始值相同
主要是为一些复杂的类型处理设计的(比如STL里面的类型,现在还一知半解,学习到后面应该会清晰)

标签:转换,符号,int,float,day3,char,Plus,类型,Primer
From: https://blog.csdn.net/m0_73617263/article/details/142102725

相关文章

  • 【C++ Primer Plus习题】14.3
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include"queuetp.h"usingnamespacestd;intmain(){ Queue......
  • 靶机 primer
    primer虚假的打法dirbdirbhttp://192.168.1.115-X.php.txt-X指定后缀参数爆破Fuzzing/Fuzz_For_Webatmaster·hacknpentest/Fuzzing·GitHubwfuzz-c-w/usr/share/wfuzz/wordlist/general/common.txt--hc404--hw500http://website-ip/index.php?FUZZ=s......
  • “PLUS模型+“生态系统服务多情景模拟预测
    生态系统服务是人类直接或间接从生态系统中获得的惠益,在应对城市挑战和实施可持续发展方面发挥着至关重要的作用。随着全球城市化的快速发展, 频繁的人类活动导致了土地利用的快速变化,导致生态系统结构和功能的变化,影响生态系统服务的供应。因此,生态系统服务评估与未来城市土......
  • mybaties-plus使用@SelectProvider实现动态SQL
    mybaties-plus使用@SelectProvider实现动态SQL新建DynamicSqlProvider.java类packagecom.muphy.mapper;importorg.apache.ibatis.jdbc.SQL;importjava.util.*;publicclassDynamicSqlProvider{publicStringbuildSelectSql(Map<String,Object>params){......
  • mybatis plus 常用知识汇总(保姆级教程!~)
    介绍:MyBatis-Plus是基于MyBatis框架的一个增强工具,主要目的是简化MyBatis的开发过程,提供更加简洁、方便的CRUD操作。它是在保留MyBatis强大功能的基础上,通过封装和优化一些常见操作来提高开发效率。MyBatis-Plus提供了许多开箱即用的功能,包括自动CRUD代码生成、分页......
  • mybatis plus 常用知识汇总(保姆级教程!~)
    介绍:MyBatis-Plus是基于MyBatis框架的一个增强工具,主要目的是简化MyBatis的开发过程,提供更加简洁、方便的CRUD操作。它是在保留MyBatis强大功能的基础上,通过封装和优化一些常见操作来提高开发效率。MyBatis-Plus提供了许多开箱即用的功能,包括自动CRUD代码生成......
  • SpringBoot集成MyBatis-Plus
    初始化SpringBoot项目(添加Lombok和MySQLDriver依赖)  关键依赖包:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xs......
  • 变量&数据类型 Day3
    1.变量1.1变量的概念变量是计算机内存中的一块存储单元,是存储数据的基本单元变量的组成包括:数据类型、变量名、值,后文会具体描述变量的本质作用就是去记录数据的,比如说记录一个人的身高、体重、年龄,就需要去程序中记录数据,而不同的数据使用不同的数据类型去存储,后文会具......
  • 信息安全学习day3
    Day3Linux文件与目录管理2024年9月2日14:14Linux文件与目录管理01命令格式Rm 命令  -rf选项   /*参数(命令不可以省略,选项参数可以缺省规范1.必须有命令2.命令选项参数之间要有空格3.命令区分大小写4.顺序(大部分情况顺序不影响)命令选项详细资料Linu......
  • 【C++ Primer Plus习题】12.6
    1大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"queue.h"using......