Java基础之运算符

xiaoxiao2021-02-28  39

Java中常用的运算符分为:

1.算术运算符中着重说下"++"和"--":

    "++"和"--"在运算中分为前++(--)和后++(--);

    前++在运算中是本身先运算后在参与运算的,而后++不同,是本身在表达式中不参与运算的.

    前--在运算中是本身先运算后在参与运算的,而后--不同,是本身在表达式中不参与运算的.

2.逻辑运算符中着重说下"|","||"和"&&","&"在执行上的区别:

    逻辑运算符是对boolean类型的值进行运算的.

    "|":或,"||":短路或;遇true则true.

    "&":与,"&&":短路与;遇false则false.

    在日常开发中短路与和短路或是比较常用的,在运算中,"|",前后关系表达式都得进行运算判断,"||",而"||"的前面的关系表达式如果为true,后面就不用进行运算了.

3.赋值运算符中着重说下"=","+=",在表达式中赋值和默认强转的区别:

   byte b = 3;

   b+=1;这行代码直接进行了类型转换

   b= b + 1;而它必须进行向下转型b = b + (byte)1;

4.位运算符:

    是对(数值)二进制进行运算的

    ">>":位右移(左补,最高位补为1,就补1,最高位为0,就补0)

    "<<":位左移(右补0)

    ">>>":无符号右移(左补0)

    "^":位异或(相同则0,不同则1)

    "~":按位取反

    "|":位与(遇0则0)

    "&":位或(遇1则1)

5.三元表达式:

    (关系表达式)?true:false;

6.面试题:

 

public class OperatorDemo { /** * 面试题1:交换变量 * int x = 10; int y = 20; */ @Test public void demo_01() { int x = 10; int y = 20; int n; n = x; x = y; y = n; System.out.println(x); System.out.println(y); } @Test public void demo_02() { int x = 10; int y = 20; int n; n = x+y; x = n-x; y = n-y; System.out.println(x); System.out.println(y); } @Test public void demo_03() { int x = 10; int y = 20; x=(x+y)-(y=x); System.out.println(x); System.out.println(y); } @Test public void demo_04() { int x = 10; int y = 20; x = x^y; y = x^y; x = x^y; System.out.println(x); System.out.println(y); } /** * 面试题2: * 如何最有效率的算出数字8 */ @Test public void demo_05() { System.out.println(2<<2); } @Test public void demo_06() { int a = 3; int b = 4; /** * 位运算符 需要把数值转化成二进制进行运算 * 3 * 00000000 00000000 00000000 00000011 * 4 * 00000000 00000000 00000000 00000100 */ System.out.println(a&b); /** 遇0则0 * 00000000 00000000 00000000 00000000 * * 0 */ System.out.println(a|b); /** 遇1则1 * 00000000 00000000 00000000 00000111 * * 7 */ System.out.println(a^b); /** 同0则1 特点:一个数据被另一个数据位异或两次 等于 它本身 * 00000000 00000000 00000000 00000111 * * 7 */ System.out.println(~a); /** 按位取反 * 00000000 00000000 00000000 00000011 * * 11111111 11111111 11111111 11111100 * 11111111 11111111 11111111 11111011 * 10000000 00000000 00000000 00000100 * -4 */ System.out.println(a<<2); /** 左移 扩大2^2 * 3 * 00000000 00000000 00000000 00000011 * (00)000000 00000000 00000000 0000001100 * * 12 */ System.out.println(a>>2); /** 右移 左边符号位为1,就补1,是0补0;缩小2^2 * 3 * 00000000 00000000 00000000 00000011 * 0000000000 00000000 00000000 000000(11) * 0 */ System.out.println(a>>>2); /** 无符号右移 左边永远补0 * 3 * 00000000 00000000 00000000 00000011 * 0000000000 00000000 00000000 000000(11) * 0 */ } } @Test public void demo_01() { /** * 使用三元运算符完成如下练习 比较两个数是否相等 获取两个数中最大值 获取三个数中最大值 */ int a =10; int b =20; int c =30; //比较两个数是否相等 System.out.println((a==b)?true:false); //获取两个数中最大值 System.out.println((a>b)?a:b); //获取三个数中最大值 int temp = a>b?a:b; int max = temp>c?temp:c; System.out.println(max); int max2 = (a>b)?((a>c)?a:c):((b>c)?b:c); System.out.println(max2); } @Test public void demo_02() { int x = 1,y = 1; if(x++==2 & ++y==2) { x =7; } System.out.println("x="+x+",y="+y); //x = 2 y = 2 } @Test public void demo_03() { int x = 1,y = 1; if(x++==2 && ++y==2) { x =7; } System.out.println("x="+x+",y="+y); //x = 2 y = 1 } @Test public void demo_04() { int x = 1,y = 1; if(x++==1 | ++y==1) { x =7; } System.out.println("x="+x+",y="+y); //x = 7 y = 2 } @Test public void demo_05() { int x = 1,y = 1; if(x++==1 || ++y==1) { x =7; } System.out.println("x="+x+",y="+y); // x = 7 y =1 ; } @Test public void demo_06() { boolean b = true; if(b==false) System.out.println("a"); else if(b) System.out.println("b"); else if(!b) System.out.println("c"); else System.out.println("d"); //b }

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-2614050.html

最新回复(0)