大二寒假读书笔记150204
来源:互联网 发布:如何注册新网域名 编辑:程序博客网 时间:2024/04/26 17:09
1、关系操作符和逻辑操作符使用算术或指针类型的操作数,并返回bool类型的值。
逻辑与和逻辑或操作符总是先计算其左操作数,只有当仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数。我们称这种求解策咯为“短路求值”。
2、位操作符
位操作符操纵的整数的类型可以是有符号的也可以是无符号的。如果操作数为负数,则操作数如何处理其操作数的符号位依赖于机器。因此对于位操作符,强烈建议使用unsigned整型操作数。
~ 位求反<< 左移>> 右移& 位与^ 位异或| 位或常犯的错误是把位与操作(&)和逻辑与操作(&&)混淆。同样地,位或操作(|)和逻辑或操作(||)也很容易混淆。注意看代码:
unsigned char b1 = 0145;//01100101unsigned char b2 = 0257;//10101111unsigned char result = b1 & b2;//001001013、下面是应用
bitset类比整型值上的低级位操作更容易使用。
假设某老师带了一个班,班上有30个学生,每个星期在班上做一次测验,只有及格和不及格两种测验成绩,对每个学生用一个二进制位来记录一次测试及格与否,以方便我们跟踪每次测验的结果,这样就可以用一个bitset对象或整数值来代表一次测验:
bieset<30> bitset_quiz1;unsigned long int_quiz1 = 0;
使用bitset类型时,可根据所需要的大小明确地定义bitset_quiz1,它的每一个位都默认为0.如果使用内置类型来存放测试成绩,则应将变量int_quiz1定义为unsigned long类型,这种数据类型在所有机器上都至少拥有32位长度。最后显式地初始化int_quiz1以保证该变量在使用前具有明确定义的值。
老师可以设置和检查每个位。例如,假设第27位所表示的的学生及格了,可以用下面的语句设置对应的位:
bitset_quiz1.set(27);int_quiz1 |= 1UL<<27;如果老师重新复核成绩,发现第27个同学实际上在该次测验中不及格,则可以将27位重新设置为0。
bitset_quiz1.reset(27);int_quiz1 &= ~(1UL<<27);最后,可以通过以下代码获知第27个学生是否及格:
bool status;status = bitset_quiz1[27];status = int_quiz1 & (1UL<<27);
4、将移位操作符用于IO
IO操作符为左结合,
cout<<"hi"<<"there"<<endl;//执行为((cout<<"hi")<<"there")<<endl;移位操作符具有中等优先级:其优先级比算术操作符低,但比关系操作符、赋值操作符和条件操作符优先级高。若IO表达式的操作数包含了比IO操作符优先级低的操作符,相关的优先级别将影响书写该表达式的方式。通常使用圆括号强制先实现右结合:
cout<<42 + 10;//okcout<<(10 <42);//okcout<<10<42;//error第二个cout语句解释为:(cout<<10)<42;表达式说“将10写到cout,然后用此操作(也就是cout)的结果与42比较”。
5、赋值操作符的左操作数必须是非const的左值。下面语句是不合法的:
int i , j , ival ;const int ci = i;//ok1024 = ival;//errori + j = ival;//errorci = ival;//error
赋值操作具有右结合性,当表达式含有多个赋值操作符时,从右向左结合。多个赋值操作中,各对象必须具有相同的数据类型,或者可转换为同一类型的数据结构:
int ival;int *pval;ival = pval = 0;//errorstring s1 , s2;s1 = s2 = "hello";//ok虽然0值恰好都可以赋值给ival和pval这两个不同类型的对象,但这仍然是错误的。问题在于,给pval赋值的结果是一个int*类型,再将其赋值给int型的变量就会出错。
6、箭头操作符
C++语言为包含点操作符和解引用操作符的表达式提供了一个同义词:箭头操作符(->).
点操作符用于话哦去类类型对象的成员:
items.sam_isbn(item2);如果有一个指向Sales_item对象的指针(或者迭代器),则在是医用点操作符前,需对该指针或迭代器进行解引用:
Sales_item *sp = &item1;(*sp).same_isbn(item2);如果漏掉了(),那么这段代码含义完全不同:
*sp.same_isbn(item2);这个表达式企图获得sp对象的same_isbn成员,等价于:
*(sp.same_isbn(item2));然而sp是一个没有成员的指针,这条语句无法通过编译
因为编程时经常使用这种语句,而又容易忘记(),所以用->来替代点操作符后面使用解引用操作符。
(*p).foo;//等价于p->foo;
- 大二寒假读书笔记150204
- 大二寒假读书笔记150122
- 大二寒假读书笔记150124
- 大二寒假读书笔记150125
- 大二寒假读书笔记150126
- 大二寒假读书笔记150127
- 大二寒假读书笔记150128
- 大二寒假读书笔记150129
- 大二寒假读书笔记150130
- 大二寒假读书笔记150131
- 大二寒假读书笔记150201
- 大二寒假读书笔记150203
- 大二寒假读书笔记150205
- 大二寒假读书笔记150206
- 大二寒假读书笔记150207
- 大二寒假
- 大二寒假结束言
- 大二寒假计划
- 【Jason's_ACM_解题报告】Open Credit System
- 【程序优化】ABAP程序优化的一些总结
- 我的SpringMVC+mybatis整合配置
- 多线程和进程
- 实现图片的拼接
- 大二寒假读书笔记150204
- os-level版本控制工具
- 实习篇---第五十一天
- 我和《Visual c++2013入门经典(第7版)》的那些事
- MYSQL 修改root密码命令小结
- Anroid中获取字体的高度和宽度
- 简单有效
- GridView的列数设置为auto_fit会提升性能?
- HDU 中国剩余定理