《C++ Primer》读书笔记-第二章 变量和基本类型
2017-02-06 21:14
656 查看
第一篇文章写完后收到了很多同学的后台留言,有鼓励的,也有提出建议的,还有说错别字的,每一条都一一回复了,当然提出建议的大都是说排版问题,现在已经换到MarkDown编辑器了,大家凑合着看就行了,肯定不影响阅读了,至于错别字的,哈哈,你懂就行。
第二章主要讲变量和基本类型,这一章内容很多,我会分很多章节来写。数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。
C++不仅定义了几种常用的基本内置类型(char, int, double等),还允许我们程序员定义自己的数据类型,最常用的就是我们后面经常提到的类,别害怕,类也是一种数据类型,只不过它比int、float等内置类型复杂一点,这个后面要经常提到。
int(整型)、bool(布尔类型)、char(字符类型)、short(短整型)、float(浮点型)、double(双精度浮点型)。
同一类型的数据在不同机器上所占的内存是不一样的
内置类型的机器实现,大多数计算机以2的整数次幂个比特作为块来处理内存,下面区分两个概念
· 字节(byte),可寻址的最小内存块
· 字(word),存储的基本单元,通常由几个字节组成 例如:在一个字节为8比特。
long。有个小规定是unsigned int可以缩写为unsigned,谁让人家比较常用呢,程序员又会偷懒。
接下来两个转换稍微难理解一点,不过只要按照规则来推导,也很容易算出来
unsigned char m1 = -1; //不带符号的char,不能表示负数。
signed char m2 = 256; //有符号的char
假设char占8个字节,你可以先算算m1和m2各等于多少
m1=255 因为:当我们给一个无符号数赋予一个超出它表示范围的值时,只要对它总数取模算出余数就好,在这里,8比特unsigned
char表示0-255区间,总数为256,-1对256取模为255。m2无定义,无定义就是不同的编译器对它的处理方式不一样,我们要避免给带符号类型赋值超过它表示范围的数。
//3.5,当碰到+/-等运算符,都会把小范围的数转成大范围的(这就是传说中的类型提升,一人得道,鸡犬升天),int->double,它的主要目的是保证不损失精度
我们可能会觉得自己肯定不会因为类型转换这么简单的东西而犯错,那我们来看看下面的代码,如果你看不出问题,就说明你也有可能会犯错
如果int是4字节32位,它输出4294967264,对无符号数赋予超出范围的值了啊,要转换成对应范围内的值再 int
i=(-42)mod(0xffffffff)
倒序输出10到0这十一个数
这个会死循环,你懂的,不懂的要打屁股了(i为无符号类型,故其值一定是大于等于0的,把unsigned换成int带符号的就可以了)。为了避免一些不必要的麻烦,建议不要混用带符号类型和无符号类型
关注微信公众号:编程美学,每周学点编程知识,让自己从技术小白变为技术大牛
第二章主要讲变量和基本类型,这一章内容很多,我会分很多章节来写。数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。
C++不仅定义了几种常用的基本内置类型(char, int, double等),还允许我们程序员定义自己的数据类型,最常用的就是我们后面经常提到的类,别害怕,类也是一种数据类型,只不过它比int、float等内置类型复杂一点,这个后面要经常提到。
基本内置类型
内置类型毫无疑问就是编译器为我们已经定义好了的数据类型,常用内置类型如下,内容较多,我们常用的有int(整型)、bool(布尔类型)、char(字符类型)、short(短整型)、float(浮点型)、double(双精度浮点型)。
同一类型的数据在不同机器上所占的内存是不一样的
内置类型的机器实现,大多数计算机以2的整数次幂个比特作为块来处理内存,下面区分两个概念
· 字节(byte),可寻址的最小内存块
· 字(word),存储的基本单元,通常由几个字节组成 例如:在一个字节为8比特。
带符号类型和无符号类型
带符号类型可以表示正数,负数或0,可以理解为带的符号就是正负号,无符号类型只能表示非负数,毕竟不让带符号,默认就是正号了。 例如unsignedlong。有个小规定是unsigned int可以缩写为unsigned,谁让人家比较常用呢,程序员又会偷懒。
类型转换
这个很好理解,不同的数据类型之间相互转换,我直接写代码你看注释就好bool b = 42; //b为真,除非b=0,其他均为真,bool型只有 0 1两值 int i = b; //i=1,因为b是true,对应的int就是1,注意原来的42早就木有了,bool型值要注意啊,不要被外表给蒙蔽了双眼啊。
int a = 3.66; //a=3,注意不是四舍五入,而是直接舍弃小数部分 double c = a; //c=3.0,a为int型,转double直接在后面加0
接下来两个转换稍微难理解一点,不过只要按照规则来推导,也很容易算出来
unsigned char m1 = -1; //不带符号的char,不能表示负数。
signed char m2 = 256; //有符号的char
假设char占8个字节,你可以先算算m1和m2各等于多少
m1=255 因为:当我们给一个无符号数赋予一个超出它表示范围的值时,只要对它总数取模算出余数就好,在这里,8比特unsigned
char表示0-255区间,总数为256,-1对256取模为255。m2无定义,无定义就是不同的编译器对它的处理方式不一样,我们要避免给带符号类型赋值超过它表示范围的数。
int a = 1; double b = 2.5; cout << a+b << endl;
//3.5,当碰到+/-等运算符,都会把小范围的数转成大范围的(这就是传说中的类型提升,一人得道,鸡犬升天),int->double,它的主要目的是保证不损失精度
我们可能会觉得自己肯定不会因为类型转换这么简单的东西而犯错,那我们来看看下面的代码,如果你看不出问题,就说明你也有可能会犯错
unsigned u = 10; int i = -42; cout << u + i << endl;
如果int是4字节32位,它输出4294967264,对无符号数赋予超出范围的值了啊,要转换成对应范围内的值再 int
i=(-42)mod(0xffffffff)
倒序输出10到0这十一个数
for(unsigned i=10; i>=0; --i) cout << i << endl;
这个会死循环,你懂的,不懂的要打屁股了(i为无符号类型,故其值一定是大于等于0的,把unsigned换成int带符号的就可以了)。为了避免一些不必要的麻烦,建议不要混用带符号类型和无符号类型
关注微信公众号:编程美学,每周学点编程知识,让自己从技术小白变为技术大牛
相关文章推荐
- 《C++ Primer》读书笔记第二章-1-基本内置类型 And 变量
- C++ Primer 第二章 变量和基本类型
- C++ Primer 第二章 变量和基本类型 笔记
- C++ Primer 学习笔记(第二章:变量和基本类型)
- c++ primer 学习笔记 第二章 变量和基本类型
- C++ Primer 笔记(2)第二章 变量与基本类型
- C++ Primer 【第四版】第二章 变量和基本类型
- C++ Primer : 第二章:变量和基本类型(1)
- C++ Primer 第二章 变量和基本类型
- C++ primer 学习笔记(第二章:变量和基本类型)
- 《C++ Primer》读书笔记(二)-变量和基本类型
- C++ Primer 第二章 变量和基本类型 笔记
- C++ primer 读书笔记(第2章)变量和基本类型
- c++primer第二章读书笔记---变量和基本类型
- C++ Primer 5 笔记 第二章 变量和基本类型
- C++ Primer 第二章 变量和基本类型 笔记
- (笔记)C++ Primer/第二章 变量和基本类型
- 《C++ Primer》学习笔记 第二章 变量与基本类型
- C++ Primer-第二章 变量和基本类型
- 总结:《C++ primer》中文版——第二章 变量和基本类型