当前位置:   article > 正文

Java中的各种运算符_java语言的运算符分哪些类型?各有哪些运算符?

java语言的运算符分哪些类型?各有哪些运算符?

目录

一、关于运算符

二、赋值运算符

        1.赋值运算符有哪些。

        2.例子1。

三、关系运算符

        1.关于关系运算符。

        2.例子2。

四、逻辑运算符

        1.关于逻辑运算符。

        2.例子3(&,|,^,!)。

        3.关于%%和||

        4.例子4(%%和||)

五、三目运算符(三元运算符)

        1.什么是三目运算符。

        2.例子5

六、位运算符(稍微难点)

        1.关于位运算符 

         2.详解

  


一、关于运算符

        1.运算:对常量和变量进行操作的过程叫做运算;

        2.运算符:对常量和变量进行操作的符号称作运算符;

        3.操作数:参与运算的数据;

        4.表达式:用运算符把常量或者变量连接起来符号并且符合java语法的式子就可以称为表达式。 不同运算符连接的式子体现的是不同类型的表达式;

5.算术运算符:+,-,*,/,%,++,--。

6.各种运算符的优先级:

 

二、赋值运算符

        1.赋值运算符有哪些。

                赋值运算符: = , +=, -=, *=, /=, %= 。其中我们一直在使用的也是最常用的:=

        2.例子1。

、        例子①:

  1. public class OptFuZhiDemo1 {
  2. public static void main(String[] args) {
  3. // int a = 10;
  4. // int b = a;
  5. // System.out.println(a);
  6. // System.out.println(b);
  7. // +=
  8. // int a += 10;
  9. int a = 10;
  10. a += 20; //这里实际上可以看作为a的值加上了一个20再赋值给a,但是不能完全等于 a = a + 20;
  11. System.out.println(a);
  12. //-=
  13. a-=10;
  14. System.out.println(a); //20
  15. //*=
  16. a*=2;
  17. System.out.println(a); //40
  18. // /=
  19. a/=2;
  20. System.out.println(a); //20
  21. // %=
  22. a%=3;
  23. System.out.println(a); //2
  24. }
  25. }

                例子②

  1. /*
  2. short s=1, s = s+1;
  3. short s=1, s += 1;
  4. 上面两个代码有没有问题,如果有,那里有问题
  5. 第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的
  6. 结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。
  7. 第二个代码没有问题,是因为内部自动包含了强制类型转换,s+=1 ===> s = (s的数据类型)(s+1)
  8. */
  9. public class OptFuZhiDemo2 {
  10. public static void main(String[] args) {
  11. // short s = 1;
  12. // s = (short)(s + 1);
  13. short s = 1;
  14. s+=1;
  15. System.out.println(s);
  16. }
  17. }

三、关系运算符

        1.关于关系运算符。

                常见的关系运算符有 ==,!=,>,<,>=,<=。

                注意事项:①关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false;

                                 ②==不能少写,一个=是赋值运算符,==才是关系运算符;

                                 ③赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收。

        2.例子2。

                

  1. public class OptGuanXiDemo1 {
  2. public static void main(String[] args) {
  3. int a = 3;
  4. int b = 9;
  5. boolean flag = (a == b);
  6. // int flag2 = (a == b);
  7. System.out.println(flag);
  8. //!=
  9. System.out.println(a != b);
  10. //>
  11. System.out.println(a>b);
  12. //<
  13. System.out.println(a<b);
  14. //>=
  15. a = 4;
  16. System.out.println(a>=b);
  17. //<=
  18. System.out.println(a<=b);
  19. System.out.println(a==b);
  20. System.out.println(a=b);
  21. }
  22. }

四、逻辑运算符

        1.关于逻辑运算符。

                ①&,|,^,!,&&,|| 

                ②逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值

                        &: 参与运算的时候,两边有false,则false,两边都做运算

                        |: 参与运算的时候,两边有true,则true,两边都做运算

                        ^: 参与运算的时候,相同为false,不同为true,两边都做运算

                        !: 将true变成false,false变成true

        2.例子3(&,|,^,!)。

                

  1. public class OptLogicDemo1 {
  2. public static void main(String[] args) {
  3. // int a = 3;
  4. // int b = 4;
  5. // System.out.println(a&b);
  6. int a = 3;
  7. int b = 4;
  8. // &
  9. // System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  10. // System.out.println("a:" + a + ",b:" + b);
  11. // System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
  12. // System.out.println("a:" + a + ",b:" + b);
  13. // System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
  14. // System.out.println("a:" + a + ",b:" + b);
  15. // System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  16. // System.out.println("a:" + a + ",b:" + b);
  17. // |
  18. // System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  19. // System.out.println("a:" + a + ",b:" + b);
  20. // System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
  21. // System.out.println("a:" + a + ",b:" + b);
  22. // System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
  23. // System.out.println("a:" + a + ",b:" + b);
  24. // System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  25. // System.out.println("a:" + a + ",b:" + b);
  26. // ^
  27. // System.out.println((a++ == 3) ^ (b++ == 4)); //左边true,右边也是true,结果是false,两边都做运算
  28. // System.out.println("a:" + a + ",b:" + b);
  29. // System.out.println((a++ == 4) ^ (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
  30. // System.out.println("a:" + a + ",b:" + b);
  31. // System.out.println((a++ == 3) ^ (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
  32. // System.out.println("a:" + a + ",b:" + b);
  33. // System.out.println((a++ == 4) ^ (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  34. // System.out.println("a:" + a + ",b:" + b);
  35. // !
  36. System.out.println(!((a++ == 4) ^ (b++ == 5)));
  37. }
  38. }

        3.关于%%和||

                     &&: 短路与,结果和单个与结果一样,有false则false,但是执行的东西不一样, 当&&左边的表达式结果为false的时候,结果是false,右边不执行 ;

                      ||: 短路或,结果和单个或结果一样,有true则true,但是执行的东西不一样, 当||左边是true的时候,右边不执行,结果是true.

             ( 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6。

        4.例子4(%%和||

        

  1. public class OptLogicDemo2 {
  2. public static void main(String[] args) {
  3. int a = 3;
  4. int b = 4;
  5. // &
  6. // System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  7. // System.out.println("a:" + a + ",b:" + b);
  8. // System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
  9. // System.out.println("a:" + a + ",b:" + b);
  10. // System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
  11. // System.out.println("a:" + a + ",b:" + b); // 45
  12. // System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  13. // System.out.println("a:" + a + ",b:" + b); //
  14. System.out.println("====================================================================");
  15. a = 3;
  16. b = 4;
  17. // &&
  18. // System.out.println((a++ == 3) && (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  19. // System.out.println("a:" + a + ",b:" + b);
  20. // System.out.println((a++ == 4) && (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
  21. // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  22. // System.out.println((a++ == 3) && (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
  23. // System.out.println("a:" + a + ",b:" + b);
  24. // System.out.println((a++ == 4) && (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  25. // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  26. System.out.println("====================================================================");
  27. a = 3;
  28. b = 4;
  29. // |
  30. System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  31. System.out.println("a:" + a + ",b:" + b);
  32. System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
  33. System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  34. System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
  35. System.out.println("a:" + a + ",b:" + b);
  36. System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  37. System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  38. System.out.println("====================================================================");
  39. a = 3;
  40. b = 4;
  41. // ||
  42. // System.out.println((a++ == 3) || (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
  43. // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  44. // System.out.println((a++ == 4) || (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
  45. // System.out.println("a:" + a + ",b:" + b); //a:4,b:5
  46. // System.out.println((a++ == 3) || (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
  47. // System.out.println("a:" + a + ",b:" + b); //a:4,b:4
  48. // System.out.println((a++ == 4) || (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
  49. // System.out.println("a:" + a + ",b:" + b); //a:4,b:5
  50. //java不支持连续比较
  51. // System.out.println(20>a>10);
  52. System.out.println((a<20 & a>10));
  53. }
  54. }

                

五、三目运算符(三元运算符)

        1.什么是三目运算符。

                      格式:(关系表达式)?表达式1:表达式2;

                        如果关系表达式的结果为true,运算后的结果是表达式1;

                       如果关系表达式的结果为false,运算后的结果是表达式2;

注意事项:
    1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。
    2、关系表达式一定只能是boolean类型

        2.例子5

                

  1. public class OptSanMuDemo1 {
  2. public static void main(String[] args) {
  3. //求出a,b中的最大值
  4. int a = 10;
  5. int b = 30;
  6. //三目运算符解决
  7. int c = (a>b)?a:b;
  8. //面试题:int a = 20;double b = 30.0;(a>b)?a:b
  9. int a1 = 20;
  10. double b1 = 30.0;
  11. double c1 = (a1>b1)?a1:b1;
  12. System.out.println(c1);
  13. }
  14. }

                

六、位运算符(稍微难点

        1.关于位运算符 

                      位运算符:<<,>>,>>>,&,|,^,~

         2.详解

                        

  1. public class OptWeiDemo1 {
  2. public static void main(String[] args) {
  3. byte a = 3;
  4. byte b = 4;
  5. System.out.println(a&b);
  6. System.out.println(a|b);
  7. System.out.println(a^b);
  8. System.out.println(~a); //-4
  9. }
  10. }
  11. /*
  12. 由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制
  13. 3的二进制:00000011
  14. 4的二进制:00000100
  15. 又由于34都是正数
  16. 3的补码:00000011
  17. 4的补码:00000100
  18. & 运算:有00
  19. 00000011
  20. &
  21. 00000100
  22. ---------------
  23. 00000000
  24. 结果是 : 0
  25. ====================================
  26. | 运算:有11
  27. 00000011
  28. |
  29. 00000100
  30. --------------
  31. 00000111
  32. 结果是:7
  33. ====================================
  34. ^ 运算:相同则0,不同则1
  35. 00000011
  36. ^
  37. 00000100
  38. --------------
  39. 00000111
  40. 结果是:7
  41. ====================================
  42. ~ 运算:1变成00变成1
  43. 00000011
  44. ~
  45. -------------
  46. 补码: 11111100
  47. 已知补码求原码:
  48. 反码: 11111011
  49. 原码: 10000100
  50. 结果是:-4
  51. */

  

特别:

        位运算符: <<: 左移,二进制左移,右边用0补齐,多出来的丢弃

                           >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。                            >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。

        

  1. public class OptWeiDemo2 {
  2. public static void main(String[] args) {
  3. System.out.println(3<<2); //12 = 3*4 = 3*2^2
  4. System.out.println(24>>2); //6 = 24/(2*2)
  5. System.out.println(-24>>2);// -6
  6. System.out.println(-24>>>2);//1073741818
  7. System.out.println(3<<3); // 3*2^3
  8. //请用最有效率的方式写出计算2乘以8的结果
  9. // System.out.println(2*8);
  10. System.out.println(2<<3);
  11. }
  12. }
  13. /*
  14. <<: 左移,二进制左移,右边用0补齐
  15. 3的二进制:00000000 00000000 00000000 00000011
  16. 由于3是正数,所以原码,反码,补码都一样
  17. 3的补码:00000000 00000000 00000000 00000011
  18. 左移:
  19. 00000000 00000000 00000000 00000011
  20. (00)00000000 00000000 00000000 00001100 (补码)
  21. 由于最高位是0,既是补码也是原码,所以结果是: 12
  22. ================================================================
  23. >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  24. 24的二进制:00000000 00000000 00000000 00011000
  25. 由于24是正数,所以原码,反码,补码都一样
  26. 24的补码:00000000 00000000 00000000 00011000
  27. 右移:
  28. 00000000 00000000 00000000 00011000
  29. 0000000000 00000000 00000000 000110(00) (补码)
  30. 由于最高位是0,既是补码也是原码,所以结果是:6
  31. ================================================================
  32. >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
  33. -24的二进制:10000000 00000000 00000000 00011000
  34. 已知原码求补码:
  35. 原码:10000000 00000000 00000000 00011000
  36. 反码:11111111 11111111 11111111 11100111
  37. 补码:11111111 11111111 11111111 11101000
  38. 右移:
  39. 11111111 11111111 11111111 11101000
  40. 1111111111 11111111 11111111 111010(00) (补码)
  41. 已知补码求原码:
  42. 补码:11111111 11111111 11111111 11111010
  43. 反码:11111111 11111111 11111111 11111001
  44. 原码:10000000 00000000 00000000 00000110
  45. 最终结果是:-6
  46. ==============================================================
  47. >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
  48. -24的二进制:10000000 00000000 00000000 00011000
  49. 已知原码求补码:
  50. 原码:10000000 00000000 00000000 00011000
  51. 反码:11111111 11111111 11111111 11100111
  52. 补码:11111111 11111111 11111111 11101000
  53. 无符号右移2位:
  54. 11111111 11111111 11111111 11101000
  55. 0011111111 11111111 11111111 111010(00) (补码)
  56. 由于最高位是0,所以它的原码,反码,补码都是一样的。
  57. 最终结果位:0011111111 11111111 11111111 111010 = 1073741818
  58. */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/290955
推荐阅读
相关标签
  

闽ICP备14008679号