Java - day002 - 运算符,位运算,流程控制

1 运算符

   +-*/               (+)   既是数学运算 ,也是 字符串链接

   %                  求余  /  求模  (进口大麻袋)

   ==                 是否相等

   !=                  是否不等

   >  >=   <  <=   比较大小

   &&                逻辑与 (左右都为才为真真)

   ||                    (左右有一个为真,既为真)

   !                   (非真为假,非假为真)

   &                  位与

   |                   位或

   ^                  异或

   ~                 求反

   >>              带符号向右移位

   >>>            不带符号 向右移位

   <<              向左移位

   ++             自增  (放在数值左边,先自增,再取值,,放在右边.先取值,再自增)

   --             自减   (放在数值左边,先自减,再取值,,放在右边.先取值,再自减)

 a ? b : c       三项运算符

  =               赋值运算

+=  -+  &=  >>=  会自动转型

byte a = 5;

a = a + 2; 错的 (a + 2 是 int 类型, 不能赋给 byte a)

a = (byte) (a + 2);对的

a += 2; (会自动转成byte)

a += 3.14; (也会自动转成 byte 小数部分舍弃)

 

 

 

 

2 位运算  (二进制位的运算)

int 类型 四个字节  32位

(位与)相同位置的数都是 1  才是1,否则为0

00000000000000000000000001110011

00000000000000000000000000010101  &

000000000000000000000000000010001

 

 

(位或)相同位置的数一个是 1  就是1,否则为0

00000000000000000000000001110011

00000000000000000000000000010101    |  

000000000000000000000000001110111

 

 

(异或) 相同位置的数不一样既为 1 , 否则为0

00000000000000000000000001110011

00000000000000000000000000010101    ^  

000000000000000000000000001000110

异或对同一个值运算两次就是原值

 

(求反)  0变1,  1变0 (对a求反 = -a-1)

000000000000000000000000100000001   ~

1111111111111111111111111111111110111111111110

 

(带符号向右位移)

新分配一个内存空间放置位移后的数,原值不变, 右边位移超出限度的位数截掉,

左边不足的位数,根据符号位的符号.  符号位是1,补1, 为0补0

00000000000000000000000011110001  >>2 向右位移两位

00000000000000000000000000111100 (01)删掉

 

 

(不带符号向右移位)

新分配一个内存空间放置位移后的数,原值不变, 右边位移超出限度的位数截掉,

左边不足的位数, 都补0

00000000000000000000000011110001  >>2 向右位移两位

00000000000000000000000000111100 (01)删掉

 

 

(向左移位)

000000000000000000000000000111111  <<2

000000000000000000000000011111100

 

// 运算符优先级 多加小括号

移位,右移一位相当于除2,左移一位相当于乘2

 

 

3 . 流程控制

if (代码块中如果只有一句代码,可以不加大括号)

 

只能判断 byte, short, char , int 类型, 或者说只能判断int enum枚举

jdk 1.7之后可以判断 String类型

case 不能写变量,或者常量

switch (变量或表达式){

case a:

    break;

case b:

     break;

default:

     break;

}

如果所有的case 都不执行, 会执行 default

 如果不写 break ,当一个case 成立,会无条件执行所有case包括default  (穿透),

 直到执行完毕或者遇到break

 

posted @ 2019-04-06 09:05  Dingzhijie  阅读(175)  评论(0编辑  收藏  举报