1.运算符
(1)算术运算符:+、-、*、/、%、++、--
(2)关系运算符:>、<、>=、<=、==、!=
(3)逻辑运算符:!,&&,||,&、|
(4)位运算符:>>、<<、>>>、&、|、^、~
(5)赋值运算符:=、扩展运算符,如+=、/=等
(6)条件运算符:?:
(7) 其他运算符:包括分量运算符、下标运算符[]、实例运算符 instanceof、内存分配运算符new、强制转换运算符(类型)、方法调用运算符()
2.表达式
(1)运算公式:
非:真非为假,假非为真
与:
true 与 true = true
true 与 false = false
false 与 true = false
false 与 false = false
或:
true 或 true = true
true 或 false = true
false 或 true = true
false 或 false = false
(2)&和&&的区别
&(单位与):不管‘与’符号左边的逻辑运算结果是真还是假,都会判断符号右边的结果,耗时。
&&(短路与):如果‘与’符号左边的结果为假,就不会再判断右边的运算结果,因为最终的结果已经确定,为假。省时
(3)|和||的区别
|(单位或):不管‘或’符号左边的逻辑运算结果是真还是假,都会判断符号右边的结果,耗时。
||(短路或):如果‘或’符号左边的结果为真,就不会再判断右边的运算结果,因为最终的结果已经确定,为真。省时
(4)位运算符 & | ~ << >> ^
运算时:将 1 看成 true ,0看成false
& | ~ 与逻辑运算符公式一样
1010-0110 = 166
0110-1010 = 106
1010-0110
&0110-1010
---------------
0010-0010 = 34
1010-0110
|0110-1010
---------------
1110-1110=238
1010-0110
~0101-1001=89
-167
<< 左移
8<<3=64 8对应的二进制数项做移动三个单位
相当于乘法运算 8 * 8=64
0000-1000
0100-0000=64
>> 右移
9 >> 2 = 2 9对应的二进制数向右移动两个单位
相当于除法运算 9 / 4=2
0000-1001
0000-0010 = 2
(5)异或 ^
异或:相同为假,不同为真
true 异或 true = false
true 异或 false = true
false 异或 true = true
false 异或 false = false
结论:任何数与0异或,结果都等于这个数。
相同的两个数之间异或,结果为0
多个值之间相互异或时,异或满足交换律。
(6)一元运算符 ++ -- += -= *= /= %=
指,只经过一次运算就完成赋值和运算结果的功能
++ 自增 每次自增1
i++和++i
==>i=i+1;
i++与++i的区别
++i先自增再运算
i++先运算再自增
-- 自减
i-- --i ==>i=i-1;
自增 10 ==>i=i+10;
+=:自增n
i+=10;==>i=i+10;
(7)三元运算符 变量=条件?值1:值2;
经过三次运算得到结果:
1.判断条件是否成立(条件运算符)
2.如果条件成立,取值1,否则取值2 。
3.将取出的值赋值给变量(赋值运算符)
3.控制流程
1、顺序执行:是执行流程的一般情况,执行时会按照代码的书写顺序从上而下执行。
2、分支执行:是一种特别情况,程序执行时会依据某种条件判断的结果,转而去执行不同的代码块(子流程)。所谓的条件判断的结果就是由条件表达式或逻辑表达式所返回的结果,它是布尔类型,如果是true则执行流程1,否则执行流程2。分支执行让程序具有了一种选择功能,也可以让程序在不同的情况去实现不同的逻辑。
3、循环执行:也是一种特别情况,有时候程序需要反复地执行某一代码块,就为循环执行。循环也必须要有条件,此条件同上,通过条件是否满足来决定是否执行循环代码块。也存在死循环的情形,但这种情况要尽量避免,因为它会永久地占用cpu的资源。
另外:在c语言中有goto (标签) 语句,这可以让程序的执行点转移到程序的任何位置,在早期的面向过程的高级语言中都有它的身影;java的关键字也包含goto,但是没赋于任何功能,只作为保留关键字。Goto 会让程序的流程变得混乱,从而失去结构化的特点。