运算符:
1、赋值运算 =
左值=右值 左值:必须是变量,不能是常量
注:1、注意溢出
溢出:将大数据存储到小空间 (2L的水杯,却放3L的水)
不同类型赋值:
short=int 可能溢出
int=short; 不会溢出
short=char;
short=float ->将小数位舍弃,整数位赋值
float=short; //整数位赋值,小数位为0
2算术运算符:+ - * / %
算术运算符表达式:由数据与运算符组成的式子称为表达式
表达式的结果:算术结果
注:在运算算术中,只能转换为同类型才能运算(为了提高精度)
char->int
int along b a->long
int afloat b a->double float->double
char/short->int-float>double
3、判断运算符: > < != >= <=
结果:bool值的结果(1 0)
4逻辑运算符: ! || &&
或 表达式1||表达式2 一真则真
且 表达式1&&表达式2 一假则假
5、自增自减运算符:++ –
i=0
前自增 ++i 结果 0 i=1 (i)先自增 (结果)再赋值
i=0
后自增 i++ 结果 i=1 (i)先赋值(结果) (i)再自增
6、三目运算符:
表达式1?表达式2:表达式3;
若表达式1为真,则取表达式2的结果,否则取表达式3
7、逗号运算符: 表达式1,表达式2,表达式3,…表达式n
表达式结果:表达式1
注:不能在初始化去使用
8、运算符:sizeof 求类型或者变量的空间
9、强制类型运算符: (类型)表达式
选择结构
if
单分支:
if(condition) //如果表达式为真(非0),则执行下列表达式
command;
双分支: if(condition)
command1;
else
command2;;
注:command可以是一条语句,或者一个语句块{。。。}
多分支:
if(condition1)
command1;
else if(conditon2)
command2;
else if(condition3)
command3;
...
else
command;
switch(整型表达式)
{
case 常量表达式1:
break;
case 常量表达式2:
break;
default:
break;
}
注:表达式与常量表达式进行匹配,遇到break则结束分支。
if-else与三目运算符的执行效率
if-else 是先赋值再运算,为了节省时间,分支预测会先猜测运行 if 还是 else 并继续运行 (默认是if),若猜对则因并行运算而节省时间,若猜错则因消除运算而耗费时间。
三目运算符 是先运算再赋值,遇到选择支时停止并行并判断条件。
通常情况下如果选用if-else一定要把概率大的放前面,如果无法选择出概率则选用三目运算符
注:可将一些if-else选择转换为位运算
例:if (data[c] >= 128)
sum += data[c];
替换为:
int t = (data[c] - 128) >> 31;
sum += ~t & data[c];
浅谈分支预测、流水线与条件转移:http://www.cnblogs.com/yangecnu/p/introduce-branch-predict-pipelining-and-conditonal-move-instruction.html