java运算符

Java运输符

一、算术运算符

① +(加号):在java中有三种作用,代表正号,做加法运算,字符串的连接符
② -(减号):在java中有两种作用,代表负号,做减法运算
③ *(乘号):代表做乘法运算
④ /(除号):代表做除法运算
⑤ %(求余):代表做求余运算
⑥ ++(自增):代表做自增运算
⑦ –(自减):代表做自减运算

整数相除只能得到整数,如果想得到小数,必须把数据转化为浮点数类型
/获取的是除法操作的商,%获取的是除法操作的余数

%运算符
  1.当左边的绝对值小于右边绝对值时,结果是左边
  2.当左边的绝对值等于右边或者是右边的倍数时,结果是0
  3.当左边的绝对值大于右边绝对值时,结果是余数
  4.%运算符结果的符号只和左边有关系,与右边无关

`任何一个正整数%2结果不是0就是1可以用来当做切换条件(奇数和偶数)`

++、–运算符——代表+1或-1操作
单独使用:放在操作数的前面和后面效果一样
参与表达式运算使用:放在操作数前面,先自增或自减,然后再参与运算
          放在操作数后面,先参与运算,然后再自增或自减

二、赋值运算符

①. 基本的赋值运算符:=(把=右边的的数据赋值给左边)
②. 扩展的赋值运算符:+=、-=、*=、/=、%=(把左边和右边做加减乘除运算后,赋值给左边)
sum+ = i;  ==> sum = sum + i;

三、比较运算符

= =, !=, >, >=, <, <=
无论操作简单还是复杂,结果都是boolean类型 "=="不能写成"="

四、逻辑运算符

//逻辑运算符
    int x = 10;
    int y = 20;
    int z = 30;
    //x<y<z
    //&(逻辑与)——只要&左右两边的操作元有一个结果为false的话,最终&运算的结果为false
    System.out.println(x < y & y < z); //true & true=true
    System.out.println(x > y & y < z); //false & true=false
    System.out.println(x < y & y > z); //true & false=false
    System.out.println(x > y & y > z); //false & false=false

    //|(逻辑或)——只要|左右两边的操作元有一个结果为true的话,最终|运算的结果为true
    System.out.println(x < y | y < z); //true | true=true
    System.out.println(x > y | y < z); //false | true=false
    System.out.println(x < y | y > z); //true | false=false
    System.out.println(x > y | y > z); //false | false=false


    //!(逻辑非)
    System.out.println(true);
    System.out.println(!true);
    System.out.println(!!true);


    //&&(短路与)//若左边为false则不执行右边
    System.out.println(x < y && y < z); //true && true=true
    System.out.println(x > y && y < z); //false && true=false
    System.out.println(x < y && y > z); //true && false=false
    System.out.println(x > y && y > z); //false && false=false

    //& 与 && 的区别

    int i = 3;
    int j = 4;
    System.out.println((++i == 3)&(++j == 4));//false&false=false
    System.out.println("i的值"+i);//4
    System.out.println("j的值"+j);//5

    i = 3;
    j = 4;
    //&&如果左边的操作元结果为false,右边的操作元将不再判断
    System.out.println((++i == 3)&&(++j == 4));//false&false=false
    System.out.println("i的值"+i);//4
    System.out.println("j的值"+j);//4

    i = 3;
    j = 4;
    //&&如果左边的操作元结果为true,右边的操作元再判断
    System.out.println((++i!=3)&&(++j==4));  //true&&false=false
    System.out.println("i的值"+i);//4
    System.out.println("j的值"+j);//5


    i = 3;
    j = 4;
    System.out.println((i++==3)|(++j==4));  //true|false=true
    System.out.println("i的值"+i);//4
    System.out.println("j的值"+j);//5

    i = 3;
    j = 4;
    //左边操作元为true,右边操作元不作判断
    System.out.println((i++==3)||(++j==4));  //true|false=true
    System.out.println("i的值"+i);//4
    System.out.println("j的值"+j);//4

五、位运算符

//位运算符
//&(按位与)--当有0结果0
System.out.println(6&3);  //2
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原反补码)
//-------------------------------------
// 00000000 00000000 00000000 00000010  //2

System.out.println(6&(-3));  //4
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000011 (-3的2进制原码)
// 11111111 11111111 11111111 11111100 (-3的2进制反码)
// 11111111 11111111 11111111 11111101 (-3的2进制补码)
//-------------------------------------
// 00000000 00000000 00000000 00000100  (补码,符号位为0,原码相同) //4

//|(按位或)--有1为1
System.out.println(6|3);//7
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
//------------------------------------
// 00000000 00000000 00000000 00000111 //7

System.out.println(6|(-3));//-1
//00000000 00000000 00000000 00000110(6原反补码)
//10000000 00000000 00000000 00000011(-3原码)
//11111111 11111111 11111111 11111100(-3反码)
//11111111 11111111 11111111 11111101(-3补码)
//-----------------------------------
//11111111 11111111 11111111 11111111(补码)
//11111111 11111111 11111111 11111110(反码)
//10000000 00000000 00000000 00000001(原码)// -1

//^(按位异或)--相同为0,不同为1
System.out.println(6^3); //5 
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
//------------------------------------
// 00000000 00000000 00000000 00000101 //5

System.out.println(6^(-3)); //-5
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000011 (-3的2进制原码)
// 11111111 11111111 11111111 11111100(-3反码)
// 11111111 11111111 11111111 11111101(-3补码)
//------------------------------------
// 11111111 11111111 11111111 11111011(补码)
// 11111111 11111111 11111111 11111010(反码)
// 10000000 00000000 00000000 00000101(原码)

System.out.println(6^3^6); //3 //a^b^a = b
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 00000000 00000000 00000000 00000011 (3的2进制原码)
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
//------------------------------------
// 00000000 00000000 00000000 00000011 

System.out.println(6^3^3); //6
//~(按位取反) -- 所有位数全部取反
//正数(包括0)按位取法-- 对应绝对值+1的负数
System.out.println(~6); //-7
// 00000000 00000000 00000000 00000110 (6的2进制原反补码)
// 10000000 00000000 00000000 00000111(-7原码)
// 11111111 11111111 11111111 11111000(-7反码)
// 11111111 11111111 11111111 11111001(-7补码)

System.out.println(~7);//-8
// 00000000 00000000 00000000 00000111
// 11111111 11111111 11111111 11111000 补
// 11111111 11111111 11111111 11110111 反
// 00000000 00000000 00000000 00001000 原

System.out.println(~8);//-9
System.out.println(~9);//-10

//负数按位取反 -- 对应绝对值-1的正数
System.out.println(~(-6)); //5
System.out.println(~(-7)); //6
System.out.println(~(-8)); //7
System.out.println(~(-9)); //8

System.out.println(~1); //-2
System.out.println(~0); //-1
System.out.println(~(-1)); //0


//<<(左移)向左移动几位乘以2的几次幂 ---左位丢掉最高位,正负数都是右边补0
System.out.println(12<<1); //24
// 00000000 00000000 00000000 00001100 (12原反补)
//(0) 00000000 00000000 00000000 00011000 (24)

System.out.println(12<<2); //48

//快速计算10*8
System.out.println(10<<3);

System.out.println(-12<<1); //-24
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11101000 左移
// 11111111 11111111 11111111 11100111 反
// 10000000 00000000 00000000 00011000 原

System.out.println(-12<<2); //-48
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11010000 左移
// 11111111 11111111 11111111 11001111 反
// 10000000 00000000 00000000 00110000 补

//>>(右移)向右移动几位除以2的几次幂--右移,正数左边补0,负数左边补1
System.out.println(12>>1); //6
// 00000000 00000000 00000000 00001100 (12原反补)
// 00000000 00000000 00000000 00000110 (0) 6

System.out.println(12>>2); //3
// 00000000 00000000 00000000 00001100 (12原反补)
// 00000000 00000000 00000000 00000011 (00) 3

System.out.println(-12>>1); //-6
System.out.println(-12>>2); //-3
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11111101 右移结果
// 11111111 11111111 11111111 11111100 反
// 10000000 00000000 00000000 00000011 原

System.out.println(-12>>4); //-1
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 11111111 11111111 11111111 11111111 右移结果
// 11111111 11111111 11111111 11111110 反
// 10000000 00000000 00000000 00000001 原

//>>>(无符号位右移) -- 无论正负左边都补0
System.out.println(12>>>2);//3
System.out.println(-12>>>2);//1073741821
// 10000000 00000000 00000000 00001100 (-12原)
// 11111111 11111111 11111111 11110011 反
// 11111111 11111111 11111111 11110100 补
// 00111111 11111111 11111111 11111101 右移结果

六、三目运算符

(关系表达式) ? 表达式1 : 表达式2;
判断表达式是否成立,成立执行表达式1,不成立则执行表达式2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//找出最大值
int m = 10;
int n = 5;
int max,min;
max = m>n?m:n;
min = m<n?m:n;
System.out.println(max);
System.out.println(min);

//获取三个整数中的最大值
int c = 10;
int d = 20;
int e = 30;
int maxtemp;
maxtemp = c>d?c:d;
max = maxtemp>e?maxtemp:e;
System.out.println(max);
文章作者: Hai
文章链接: http://yoursite.com/2019/07/09/java运算符/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hai
打赏
  • 微信
  • 支付宝