C++运算总结
C++的算术运算符有: + , - , * , \ ,% 五个。
运算符优先级: +, - < *, \, %
同级别运算符优先级,在实现时由系统确定。
除法(/)的行为取决于操作数的类型。
若两个操作数都是整数则结果是整数,例:
int a = 1 / 3; // a 为0
double b = 1 / 3; // b依然为零,等效于 double b = (int) 1/3, 在表达式中操作数1和3被看作是整数,所以表达式结果也为整数
double c = 1.0 / 3; // c = 0.3333……
dobble d = 1 / 3.0; // d = 0.3333……
double e = (double) 1/3 ; // e = 0.3333.... , 相当于 double(1) / 3
double f = (double) (1/3); // f = 0, 相当于(double) (int) (1/3)
3 % -2 ==> 1
-3 % 2 ==> -1
-3 % -2 ==> 出错?
类型转换:
可能存在问题的转换:
1) double -> float, 精度(有效位数降低),值可能超出目标类型的范围;
2) 浮点(double/float) -> 整型(int/unsigned i/ long/ short), 小数部分丢失,原来的值可能超出目标类型的取值范围;
3) 大整型 -> 小整型, (e.g.: long -> short), 可能超出目标类型的取值范围,通常只复制(截取)右边的字节(低字节,)。
例3.13 assign.cpp,P63.
0赋值给bool变量时,将被转换为false;
非零值赋给bool变量时,将会转换为true;