博客园 首页 联系 订阅 管理

一、数据类型的转换

   1)自动类型转换,也叫隐形类型转换

     |--byte-->short-->int-->long-->float-->double

     |--byte-->char-->int-->long-->float-->double  

     |--当整数的类型提升到浮点数类型的时候可能会损失精度,因为int类型的精确度大于flaot类型的精确度。

     |--并且在自动类型提升的时候会发生位扩展,正数的高位全部扩展为0.负数高位全部扩展为1

 

  2)强制类型转换,也叫显示类型转换  与自动类型转换时反方向进行,但是在强制类型转化的过程中需要注意的是:

     |--正数强制类型转换的时候可能发生溢出  

     |--如:int i =128+256; byte b = (byte)i; b = -128;   

     |--浮点数类型强制转换的时候,可能会发生精度的损失    

     |--如:double d = 3.141592613445;float f = (float)d;f = 3.1415927;   

     PS:由于强转的时候产生一些意想不到的结果,所以需要谨慎使用。

 

二、java运算
   1)数学运算
      + - * /
   2)三目元算
     例如:int a = b>c?1:2;当b>c时取1(即为true时),当b<c时取2(即为false时)
        String str = true?"符合":"不符合";String str = false?"符合":"不符合";
        boolean b  = 3>2;String str = b?"符合":"不符合";
        int a = x<0?-1:(x>1?1:0);(三目元算中还可以穿插三目运算)
 
   3)比较运算
     >、<、==、>=、<=、!=
    比较运算的结果一定是boolean类型的值
    boolean b1 = 1<5<10; (错误表达式,原因:计算机不能同时处理两边比较,也可以说1<5是一个boolean类型的值与(boolean)<10比较,不合逻辑)
 
   4)逻辑运算
     <1>逻辑运算符 与& (AND)
       true  &  true   = true
       true  &  false    = false
       false &  true   = false
       false &  false    =   false


     短路逻辑 与&&(计算机在运算判断&&时当出现左边数为false时系统默认结果为false,那右边就不需要运算也称为短路了)

     <2>逻辑运算符 或|(OR)
        true  |  true   = true
      true  |  false    = true
      false |  true   = true
      false |  false    =   false


     短路逻辑运算符 或||(当左边判断为true时系统默认结果为true,那右边不需要运算也成为短路)

     <3>逻辑运算符 异或XOR ^ !

   5)递加、递减运算
    <1>++ --
       int m = 1; m = m++;//结果为1,分为4步,1.m = 1;2.m++ = 1;3.m = 2;4.m = m++;
       int n = 1,n = ++n; //结果为2
   
  PS: b = b+1;相当于b++=1;

   6)赋值运算
     =

   7)位运算
     与&   或|  异或^  互补~ 位运算操作符两边的操作数只能是整数
     位运算在运算时,先把两边整数转换成二进制然后对每一位相对应的位数进行逻辑运算(例如:与& 1与1为1,其他为0,或| 0或0为0其他为1,异或^相同为0相   | | 反为1,互补~,b=~5;即转化成二进制后每一位取反等到结果)
   作用:当其要去一个补码的时候 可以 与某个数相与,例如:要去0,则可以与0相与

   8)位移运算  
    <1>左移:<< 右移:>>


    <2>左移:例如:20<<2 二进制00010100 左移两位(即把二进制数向左移动两位后面补0)变成:01010000 (左移运算无论正负,后面补0)


    <3>右移:同上左移向右移动位置,前面不够补0,右移后的数一定为正数,而向左移动的数可能会移成负数  (右移运算负数补1正数补0)


    <4>当一个数向左移动超出范围时,系统自动进行位扩展,例如:byte b = 20;byte b2 = b<<4;此时报错,决绝方案强转成byte或者类型提升把b2变成int类型


    <5>int类型进行位扩展时,不会进行位扩展,而会进行减次运算即取余,如:int m = 1;m = m<<32;结果为1


    <6>无符号只有右移(>>>):无论正负前面补0


   PS: 与运算(可用于解密某段数据):0x00ff0000&1234 (即把1234转化成二进制后,保留其第24到16位其他位变成0)