C++ Primer 笔记 第二章
2012-09-02 00:28
127 查看
第二章
1、数据的类型决定程序可以对数据进行哪些操作,同时也决定了程序对这个数据的解读方式,例如如果是int,则将其解释为一个整数。
2、关于取值范围
例如8位signed类型的取值范围是-128~127,其中,上限:0111,1111(最大正数,标志位1为负,0为正)=2^7-1=127,下限1000,0000(这个是补码,要查看原值,必须将补码转成原码,即-1,再取反,且为负数),-1后:0111,1111,取反:1000,0000
为-128.具体见
整型数在计算机里面都是按照“补码”来存储的,补码是什么呢?请看:
0. 补码的最高位,代表符号位,0为正1为负
1. 对于正整数,补码和该整数的二进制码一样
2. 对于负整数,相当于对其绝对值的二进制码按位取反,然后+1,最后再把符号位置为1(当然还可以有更简便的算法【数学里面叫有限域的算法,用模运算来计算可能比较符合一般习惯一点】,不过逻辑电路层面是这么实现的,个人认为这么说明比较底层一点:D)
来几个直观的例子:
+3的补码是0000 0000 0000 0011
-1的绝对值为1,按位取反为1111 1111 1111 1110,+1之后是1111 1111
1111 1111,再置最高位为1,于是最终结果就是1111 1111 1111 1111
再来看-2,绝对值为2,于是二进制表达为0000 0000 0000 0010,按位取反为1111
1111 1111 1101,+1之后(再置最高位为1)是1111 1111 1111 1110
从数学上看,正好-2就像是在-1的基础上“减一”得到了
好,那么一直这么算下去,于是
1000 0000 0000 0000
这个是多少呢?
按照补码的规则,他可以是+32767(0111 1111 1111 1111)再加1得到~然则最高位是符号位,这又是一个负值,按补码解析的时候,这必须是一个负值...
好,稍微扯远一点点,-32767的补码是多少?是:
1000 0000 0000 0001
再减一呢?就得到了
1000 0000 0000 0000
于是把这个解析为-32768是合理的~~~
3、变量的左值与右值
左值:变量出现在左右均可(左值就是变量的地址);
右值:只能出现在右边(右值就是变量的值)。
4、保留字
注意goto是保留字,但是go to 可以作为变量名使用。
5、变量初始化的两种方式
直接初始化:int val(1024); //直接将val赋值为1024
复制初始化:int val=1024; //先是创建一个临时int对象temp,令其值为1024,再将temp复制给val
所以对于某些自定义的类类型,初始化时一般是直接初始化,若用复制初始化则可能需要自己写copt constructor.
6、变量初始化规则
内置类型变量的初始化
函数体外定义:默认为0;
函数体内定义:不自动初始化。
类类型初始化
通过构造函数实现。
7、const
作用:将一个变量设为只读的,注意在定义const变量时要同时初始化,并且const变量时不允许修改值的。
const对象默认为局部变量。
8、引用
const对象必须被初始化
引用必须用与该引用同类型的对象初始化:
int val=1;
int $ref=val; //ok,引用ref的类型与被引用变量val的类型一致
int &ref1; //error,定义引用的时候要同时初始化
int &ref2=1; //error,1的类型为int,引用ref2的类型为int
引用是别名,通过引用访问原对象与使用对象的名字访问效果一致
const引用
cosnt引用是指向const对象的引用:
const int val=1;
const int &ref=val; //ok,类型都是const int
int &ref1=val; //error,from const int to int
9、typedef:相当于给某个数据类型取个别名;
如:typedef double wages; //wages是double的别名
10、枚举类型
//input is 0, output is 1, append is 2
enum oper_modes{input, output, append};
枚举成员是常量,不能改变其值,并且默认第一个为0
如:input=5; // error, input is a constant
11、用struct和class关键字定义类的唯一差别是默认访问级别:默认情况下,struct的成员为public,而class的成员为private。
12、
c++中,定义只可以出现一次,而声明则可以声明多次。
因为头文件包含在多个源文件中,所以不应该含义变量或函数的定义。(为避免重复定义)
头文件可以定义const对象和inline函数。
13、预处理器
避免多重包含:
#ifndef SALESITEM_H //如果SALESITEM_H未定义,则定义它;否则跳到#endif的下一个语句执行。
#define SALESITEM_H
#endif
1、数据的类型决定程序可以对数据进行哪些操作,同时也决定了程序对这个数据的解读方式,例如如果是int,则将其解释为一个整数。
2、关于取值范围
例如8位signed类型的取值范围是-128~127,其中,上限:0111,1111(最大正数,标志位1为负,0为正)=2^7-1=127,下限1000,0000(这个是补码,要查看原值,必须将补码转成原码,即-1,再取反,且为负数),-1后:0111,1111,取反:1000,0000
为-128.具体见
整型数在计算机里面都是按照“补码”来存储的,补码是什么呢?请看:
0. 补码的最高位,代表符号位,0为正1为负
1. 对于正整数,补码和该整数的二进制码一样
2. 对于负整数,相当于对其绝对值的二进制码按位取反,然后+1,最后再把符号位置为1(当然还可以有更简便的算法【数学里面叫有限域的算法,用模运算来计算可能比较符合一般习惯一点】,不过逻辑电路层面是这么实现的,个人认为这么说明比较底层一点:D)
来几个直观的例子:
+3的补码是0000 0000 0000 0011
-1的绝对值为1,按位取反为1111 1111 1111 1110,+1之后是1111 1111
1111 1111,再置最高位为1,于是最终结果就是1111 1111 1111 1111
再来看-2,绝对值为2,于是二进制表达为0000 0000 0000 0010,按位取反为1111
1111 1111 1101,+1之后(再置最高位为1)是1111 1111 1111 1110
从数学上看,正好-2就像是在-1的基础上“减一”得到了
好,那么一直这么算下去,于是
1000 0000 0000 0000
这个是多少呢?
按照补码的规则,他可以是+32767(0111 1111 1111 1111)再加1得到~然则最高位是符号位,这又是一个负值,按补码解析的时候,这必须是一个负值...
好,稍微扯远一点点,-32767的补码是多少?是:
1000 0000 0000 0001
再减一呢?就得到了
1000 0000 0000 0000
于是把这个解析为-32768是合理的~~~
3、变量的左值与右值
左值:变量出现在左右均可(左值就是变量的地址);
右值:只能出现在右边(右值就是变量的值)。
4、保留字
注意goto是保留字,但是go to 可以作为变量名使用。
5、变量初始化的两种方式
直接初始化:int val(1024); //直接将val赋值为1024
复制初始化:int val=1024; //先是创建一个临时int对象temp,令其值为1024,再将temp复制给val
所以对于某些自定义的类类型,初始化时一般是直接初始化,若用复制初始化则可能需要自己写copt constructor.
6、变量初始化规则
内置类型变量的初始化
函数体外定义:默认为0;
函数体内定义:不自动初始化。
类类型初始化
通过构造函数实现。
7、const
作用:将一个变量设为只读的,注意在定义const变量时要同时初始化,并且const变量时不允许修改值的。
const对象默认为局部变量。
8、引用
const对象必须被初始化
引用必须用与该引用同类型的对象初始化:
int val=1;
int $ref=val; //ok,引用ref的类型与被引用变量val的类型一致
int &ref1; //error,定义引用的时候要同时初始化
int &ref2=1; //error,1的类型为int,引用ref2的类型为int
引用是别名,通过引用访问原对象与使用对象的名字访问效果一致
const引用
cosnt引用是指向const对象的引用:
const int val=1;
const int &ref=val; //ok,类型都是const int
int &ref1=val; //error,from const int to int
9、typedef:相当于给某个数据类型取个别名;
如:typedef double wages; //wages是double的别名
10、枚举类型
//input is 0, output is 1, append is 2
enum oper_modes{input, output, append};
枚举成员是常量,不能改变其值,并且默认第一个为0
如:input=5; // error, input is a constant
11、用struct和class关键字定义类的唯一差别是默认访问级别:默认情况下,struct的成员为public,而class的成员为private。
12、
c++中,定义只可以出现一次,而声明则可以声明多次。
因为头文件包含在多个源文件中,所以不应该含义变量或函数的定义。(为避免重复定义)
头文件可以定义const对象和inline函数。
13、预处理器
避免多重包含:
#ifndef SALESITEM_H //如果SALESITEM_H未定义,则定义它;否则跳到#endif的下一个语句执行。
#define SALESITEM_H
#endif
相关文章推荐
- C++ Primer 第二章 变量和基本类型 笔记
- C++ Primer 第二遍阅读笔记(第二章)
- c++ primer 第五版学习笔记-第二章-顶层和底层const
- c++ primer(第五版)学习笔记及习题答案代码版(第二章)
- C++ Primer 第二章 变量和基本类型 笔记
- C++ primer 第二章笔记
- c++ primer(第五版)笔记 第二章(2) 变量
- [C++ primer]第二章笔记--变量和基本类型
- c++ primer 第五版学习笔记-第二章-typedef不等于#define
- c++ Primer学习笔记之第二章 变量和基本类型
- c++ primer(第五版)笔记 第二章(3)复合类型
- 《C++ Primer》笔记——第二章 变量和基础类型
- C++ Primer 学习笔记(第二章)
- C++ primer 复习笔记 (第一章、第二章)
- C++ Primer 学习笔记(第二章:变量和基本类型)
- C++ primer 学习笔记 第二章
- C++ Primer复习和学习笔记 第二章 变量和基本类型
- 笔记——C++ primer第二章 const限定符
- c++ primer 第五版学习笔记-第二章-类型转换
- c++ primer 学习笔记 第二章 变量和基本类型