C++primer 学习笔记(三)

charpter 4

  • 逻辑与&& 只有左侧运算对象为真才会对右侧对象求值
  • 逻辑或|| 只有左侧运算对象为假才会对右侧对象求值
  • ++i先加再执行,i++先执行再加 ,建议++i,运算等级最高
  • 成员访问运算符 ptr->mem // (*ptr)->mem
  • 条件运算符 cond ? expr1 : expre2 如果cond成立,expr1,否则expr2

位运算

位运算作用于整数类型的对象 , 运算符包括

~ 位求反
<< 左移

右移
& 位与
^ 位异或
| 异或

  • 移位运算 左移<<在右侧插入值为0,右移若为无符号则在左插入0,否则插入符号位。
  • 位异或 若只有1个1则为1 ,否则为0
  • 置1 |= ,清0 &=~

    sizeof运算符

  • 返回一条表达式或一个类型名字所占的字节数,所得size_t类型,sizeof(type) sizeof expr
  • 与strlen()比较strlen()计算字符数组的字符数,以”\0”为结束判断,不计算为’\0’的数组元素。而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示
  • 指针与静态数组的sizeof操作,指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4
  • 对于静态数组,sizeof可直接计算数组大小
  • 注意:数组做型参时,数组名称当作指针使用!!
  • sizeof(s)等于string类的大小,sizeof(s.c_str())得到的是与字符串长度。
  • 求数组元素的个数,通常有下面两种写法:

    int c1 = sizeof( a1 ) / sizeof( char ); // 总长度/单个元素的长度
    int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 总长度/第一个
    元素的长度
    静态数组 int c3 =sizeof(a1)/sizeof(*a1)
    http://www.cnblogs.com/chengxin1982/archive/2009/01/13/1374575.html

类型转换

  • 无符号+有符号运算 如果无符号类型不小于带符号的,那转为无符号的,如unsigned int 与 int
  • 如无符号类型小于带符号的,结果依赖于机器