02-java

Posted fzl-python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02-java相关的知识,希望对你有一定的参考价值。

java运算符

运算符:
就是对常量和变量进行操作的符号
分类:
算术运算符,赋值运算符,逻辑运算符,位运算符,三目运算符
算术运算符:
+ - * / % ++ --

% 取余运算符

a++ 用了之后在自增

++a 自增之后在使用

+:

  1:加法

  2:正号

  3:字符串连接符

 

赋值运算符:

基本的赋值运算符:=

拓展的赋值运算符:+=  -=  *=  /=  %=

  拓展的赋值运算符其实隐含了一个强制类型转换

 

 

比较运算符:

==     !=    >     >=     <     <=

特点:

  无论操作简单还是复杂,结果是Boolean

 

 

逻辑运算符:连接布尔型表达式

&与  |或  ^异或  !非  &&  ||  

^:相同为false 不同为true

false ^ false = false

false ^ true = true

trur ^ true = false

&& 和 & 的区别:

  1:最终结果一样

  2:&&具有短路效果,左边是false,右边不执行

  开发中常用:

    &&   ||   !

 

 

位运算符:

  &   |   ^   ~

  <<  >>   >>>

  注意:要做位运算,首先要把数据转换为二进制

^的特点:

  一个数据对另一个数据位异或两次,该数本身不变

  a ^ b ^ b = a

  a ^ b ^ a = b 

  用位异或交换两个整数:  

    左边:a b a

    右边: a ^ b

    a = a ^ b;

    b = a ^ b; //a ^ b ^ b = a

    a = a ^ b; // a ^ b ^ a =b

  开发中:

      c = a;

    a = b;

    b = c;

  用变量相加:

    a = a + b;

    b = a - b;

    a = a - b;

  一句话搞定:

    b = (a + b) - (a = b);

int a = 3;

int b = 4;

3的二进制:11

  32位操作系统:00000000 00000000 00000000 00000011

4的二进制:100

  32位操作系统:00000000 00000000 00000000 00000100

&位与运算:有0则0

3 & 4

  00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

   00000000 00000000 00000000 00000000

结果是:0

|位或运算:有1则1

3 | 4

  00000000 00000000 00000000 00000011

 |00000000 00000000 00000000 00000100

  00000000 00000000 00000000 00000111

结果是:7

^位异或运算:相同则0,不同则1

3 ^ 4

   00000000 00000000 00000000 00000011

 ^00000000 00000000 00000000 00000100

   00000000 00000000 00000000 00000111

结果是:7

~按位取反运算:0变1, 1变0

~3

  00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100(补码)

补码:11111111 11111111 11111111 11111100

反码:11111111 11111111 11111111 11111011

原码:10000000 00000000 00000000 00000100

结果是:-4

 

<<  左移:左边最高位丢弃,右边补齐0

  << 把<<左边的数据*2的移动次幂

System.out.println(3 << 2);//3 * 2^2

3二进制:00000000 00000000 00000000 00000011

      (00)000000 00000000 00000000 0000001100

>>  右移: 最高位是0,左边补齐0;最高位是1,左边补齐1。

  把>>左边的数据/2的移动次幂

System.out.println(24 >> 2);//24 / 2^2 = 6

>>>  无符号位移:无论最高位是0还是1,左边补齐0。

System.out.println(24 >>> 2);// 6

 

System.out.println(-24 >> 2);// -6

24的二进制:11000

  原码:10000000 00000000 00000000 00011000

  反码:11111111 11111111 11111111 11100111

  补码:11111111 11111111 11111111 11101000

  右移两位左边补1:

        1111111111 11111111 11111111 111010(00)  补码

  补码:1111111111 11111111 11111111 111010

  反码:1111111111 11111111 11111111 111001

  原码:1000000000 00000000 00000000 000110

  结果:-6

 

System.out.println(-24 >>> 2);// 

24的二进制:11000

  原码:10000000 00000000 00000000 00011000

  反码:11111111 11111111 11111111 11100111

  补码:11111111 11111111 11111111 11101000

  无论最高位是0还是1,左边补齐0:

     0011111111 11111111 11111111 111010(00)

     结果:73741818

 

最有效率的方式计算2 * 8的结果?

2 << 3

 

三目运算符:

  格式:比较表达式?表达式1:表达式2

      true             return

        false          return

 






以上是关于02-java的主要内容,如果未能解决你的问题,请参考以下文章