第二章 头文件、变量和基本类型(2)——算术类型及类型转换

0x01 算数类型


算数类型分类

1、整型(包含了字符和布尔类型);

2、浮点型。

C++算术类型

C++算术类型


类型尺寸的规定

1、基本的字符类型char确保可以存放机器基本字符集中的任意字符所对应的数字值,也就是说,一个char的大小和一个机器字节一样大(C++规定,一个字节至少要能容纳机器基本字符集中的字符);

2、C++标准只规定了尺寸的最小值,在规则内允许编译器赋予这些类型更大的尺寸;

3、C++规定一个int至少比一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大(long long类型是C++11 中的新定义);

4、浮点类型可表示单精度、双精度和扩展精度值;

5、C++标准顶顶了一个浮点数有效位数的最小值,一般来说,类型float和double分别有7和16个有效位,但大多数编译器都实现了更高的精度。


带符号类型和无符号类型

1、带符号类型可以表示0与正负数,无符号类型仅能表示大于等于0的数值;

2、为了得到无符号类型,可以在普通的类型名前加上unsigned,例如unsigned long;

3、unsigned int可以简写为unsigned;

4、字符型有char,signed char和unsigned char三种,重点是,char和signed char是不一样的类型。实际上字符型的表现形式只有带符号和无符号的两种,具体变现为哪一种是由编译器决定的;

5、C++标准并没有规定带符号类型应如何表示,但约定了在表示范围内正负值的数量应该平衡。


如何选择类型

1、如果确认数值不可能为负值,应选用无符号类型;

2、使用int执行整型运算。实际应用中,short常常太小,而long一般都和int一样大,如果数值超过了int的尺寸,选用long long;

3、在算术表达式中不要使用char或者bool类型。因为char是否带符号在不同机器上有不同的定义,bool类型也有不确定的因素。使用这样含有不确定因素的值可能造成程序移植上的隐患。如果一定需要这样使用,那么请明确指定它是signed char还是unsigned char;

4、双精度浮点和单精度浮点运算的性能相差无几,有时候可能双精度浮点运算更快。而且float的精度不够,所以执行浮点运算优先选择double;

5、long double提供了更高的精度,但是性能开销也随之增大,不容忽视,一般情况下是没有必要用它的。



0x02 类型转换


1、把一个非bool值赋予bool类型时,除了0的时候为false,其余均为true;
bool b = 42;                 //b为真

2、把一个bool值赋予非bool类型时,初始值是false则结果为0,true则结果为1;
bool b = 42;                 //b为真
int i = b;                   //i = 1

3、如果我们使用了一个非bool值作为判断条件,那么它将被转换成为bool值;
4、一般不宜在算术表达式中使用bool值;
5、把一个浮点数赋值给整型,进行“趋零近似”处理;
int n = 3.14;                //n = 3

6、把一个整型值赋予浮点型,小数部分记为0。如果该整数所占的空间超过浮点型的容量将可能损失精度;
int n = 3.14;                //n = 3
double pi = n;               //pi = 3.0

7、当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。所以,当必须从一个无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须明确结果不能为负值,否则结果将是取模后的值;
8、当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的,此时无法预测程序接下来的行为。
unsigned char c = -1;        //假设char尺寸为8 bit,则c的值为255
signed char c2 = 256;        //假设char尺寸为8 bit,则c的值为未定义


C++算术类型转换规则




-----------(我是分割线)-----------

        这里的学习顺序基于《 C++ Primer(第五版)》,虽说这本书是C++神书,但如果没有一定的C语言基础,肯定很难一下子啃下来,特别是原书第一章说编写一个简单的程序,结果各种语句和输入输出流都出现了,最后还来个类简介,实在是有点让新手朦逼。就算有一定的C++基础,中文版的语言也略显拗口。

        所以,我建议可以先用谭浩强的C/C++系列高校用书籍来打个基础。先别管网上对谭教授的教材评价如何,至少它能高效地带你入门。直接学习C++不是不可以,但毕竟C语言是一门经典的计算机语言,经久不衰,还衍生出了很多其他的计算机语言。学好C语言能培养出一种理解计算机语言的思维模式,以后学其他语言都可能事半功倍。

        我个人的学习方式是“先看懂,后深入,再高效”。在这里会按照我的理解,尽量用简单的语言来解释C++的知识点,至少先看懂并让程序能用再说。如果有错欢迎指正。

        文中可能有某些程序段来自pezy大神,自学C++的路上我有很多疑难都是在pezy大神的解释中顿悟。在此表示感谢!

        任何地方如有侵权请立即联系删除。

-----------(我是分割线)-----------





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值