三、java运算符

算数运算符

/ 除法

    System.out.println(10 /4); 
	 //数学角度是2.5 Java角度中  两个int型的数字作运算结果也是int 型结果为2
	 double a1 = 10 /4 ; // 两个int 型 结果为2->2.0
	 double a2 = 10.0 /4 ; //结果为 2.5
     System.out.println(a1);//2.0
     System.out.println(a2);//2.5

% 求余

本质为 a % b = a - a/b*b

a%b 当a是小数时,公式=a-(int)a/b*b

        System.out.println(10 % 3); //1
	System.out.println(-10 % 3); // -1
	System.out.println(10 % -3); //1
	System.out.println(-10 % -3);//-1
	//-10 -(-10)/(-3)*(-3) ——》 -10 -(3)*(-3) ——》 -10 - (-9) ——》 -1

++ 自增 (-- 一个道理)

	// ++ 独立使用一致
	 int i =10;
	 i++; //等价于i=i+1; => i=11;
	 ++i; //等价于i=i+1; => i=12;
	 System.out.println("i="+i);//12
	 //表达式使用
	/*前++; ++i 先自增后赋值
	  后++; i++ 先赋值后自增
	*/ 
  	int j= 8;
  	//int k= ++j; //等价于 j=j+1,k=j;
  	int k= j++;   //等价于 k=j, j=j+1;  
  	System.out.println("k="+ k +"j="+j); //k=8 ,j=9
  • 练习题
  • 1.
  • 		
            int i=1;
    		i=i++; 
             // 使用临时变量 (1) temp=i ,(2) i=i+1 ,(3) i=temp
    		System.out.println(i);
    		//int i=1;
    		//i=++i; (1) i=i+1 , (2) temp=i ,(3) i=temp

    2.

  •         int i1= 10;
    		int i2= 20;
    		int i = i1++; //i=i1 i1=i1+1  =>i=10   i1=11
                    System.out.println(i);
    		System.out.println(i1);	
    		i= --i2; //i2=i2-1 i=i2       =>i2=19  i=19
                    System.out.println(i);
    		System.out.println(i2);	

    3.假如还有 59 天放假,问:合 xx 个星期零 xx 天

  • public class ArithmeticOperatorExercise02{
          public static void main(String[]args){
          		//1.需求:
          		//假如还有 59 天放假,问:合 xx 个星期零 xx 天
          		//2.思路分析
          		//(一)用int 变量 days 保存 天数
          		//(二)星期 weeks 可以用 days / 7        零多少天left days可以用 days % 7 
     			//3.代码输出
     			//
     			int days =59;
     			int weeks = days / 7;
     			int leftDays= days % 7;
     			System.out.println(days +"天 合"+ weeks +"星期"
     				+leftDays+"天" );
          }
    
    }

    4.定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。

  •             //定义一个变量保存华氏温度,
     			//华氏温度转换摄氏温度的公式为:5/9*(华氏温度-100),
     			//请求出华氏温度对应的摄氏温度。
     			double huashi=999;
     			//double sheshi= 5 / 9 * (huashi -100); 
     			//=> 5/9 数学角度为0.555555556 
     			//而java中两个int型输出为int型  小数点后省略 结果为0
     			//=》 0*(huahsi -100 ) 都为0
     			double sheshi =5.0 / 9 *(huashi -100);
     			System.out.println("华氏温度"+huashi+"摄氏温度"+sheshi);

    关系运算符(比较)

  •  实际开发中不可用ab等 简单字符命名

  •  int a=9;
     int b=8;
     bool flag =a>b;
     System.out.println("flag"+flag);//T

    逻辑运算符


  •  

     

    &都真才真

    短路与&&

    如果第一个条件为假false 后面条件不再判断

    逻辑与 &

    第一个条件为假 后面条件继续判断

  • ublic class LogicOpertor01{
          public static void main(String[]args){
          	//短路与&& 逻辑与& 区别
          	int a = 4;
          	int b = 9;
          	if (a<10 & ++b<100){ //T
          		System.out.print("okkk"); 
    	      }
    	      System.out.println("a="+a +"b="+ b);//a=4 b=10
           /* if (a<1 && ++b<100){ 
          		System.out.print("okkk"); 
    	      }
    	      System.out.println("a="+a +"b="+ b);//a=4 b=9 */
            
          	}
    
      }

    | 有真就真

    短路或 ||

    如果第一个条件为真 则第二个条件不会判断 ,最终结果为真

    逻辑或|

    都要执行判断

  • public class LogicOpertor02{
          public static void main(String[]args){
          	int a=10;
          	int b=5;
          	if(a > 8 || ++b > 4){
          		System.out.println("okkkk");//T
          	}
          	System.out.println("a="+a+"b="+b); //a=10 b=5
    		if(a > 8 | ++b > 4){
          		System.out.println("okkkk");//T
          	}
          	System.out.println("a="+a+"b="+b); //a=10 b=6
          }
    
      }

    ! 逻辑取反

    ^ 逻辑异或 A与B不同时 输出真

  • public class InverseOpertor{
          public static void main(String[]args){
          		//!逻辑取反
          		System.out.println(10>1);//T
          		System.out.println(!(10>1));//F
          		// ^逻辑异或  A与B的 不同时 则为真
          		boolean b = (10>1)^(1>10);// T^F =》T
          		System.out.println(b);
    
    
          }
    
    
      }
    

    😺练习题

  •  

    我的错误答案❌(1)x=11 y=6 (2)同1 (3)同1 (4) y=5

    正确答案 (1)x=6 y=6

    x++ ==6 先比较再自增5不等于6 判断为假 逻辑与 后面条件为真

    (2)x=6 y=5 短路与 前为假 后条件不判断

    (3)x=11 y=6 (4)x=11 y=5

    %逻辑与(都真才真) %%短路与 (前假后不判断) |逻辑或 (有真就真) 短路或|| (前真后不判断)、

  •  

    我的答案 ❌第一个if 以后 z=47

    第二个if 以后 z=48

    输出 z=48

    正确答案:第一个if以后 z=48

    第二个if 以后 z=50

    输出 z=50

  • 赋值运算符

  • 复合赋值运算符

  •  

     //复合赋值运算符会进行类型转换

  • 
     byte b=3;
     b+=2; //等价于 b=(byte)(b+2)

    三元运算符

  • //复习i++
          	int i=1;
            int k=2;
          	i=i++; //=> temp=i i=i+1 i=temp   =>i=1
           	System.out.println(i);
            i=k++; //=> i=k k=k+1      => i=2 k=3
          	System.out.println(i); 
            //三元运算符
            /*
            int result1 = i > k ? i++ : k++; //f =>k++
            System.out.println("result="+result1); //result=3
            */
            int result1 = i < k ? i++ : k++;
            System.out.println("result="+result1);//2
            System.out.println("i="+i); //3
            System.out.println("k="+k); //3
            
            

    细节

  •  

    表达式 1 和表达式 2 要为可以赋给接收变量的类型

    (或可以自动转换/或者强制转换)练习题练习题

  • public class TernaryOpertorDetail{
          public static void main(String[]args){
          	int a=1;
          	int b=2;
          	//int c= a>b? 1.0:2.0;错 表达式都是double型
          	//int c= a>b? (int)1.0:(int)2.0
          	double c= a>b? 1.0 : b+3; //5.0
          	System.out.println(c);
          }
      }
          public class TernaryOpertorExercise{
          public static void main(String[]args){
          	//编写一个求三个数的最大值
          	int a =1;
          	int b =2;
          	int c= 3;
          	//1.思路先求得 a,b中的最大值 并且赋值给max1
          	//2.再将max1与c比较 求得最大值 max2
          	int max1= a>b? a : b;
          	int max2=max1>c? max1:c;
          	System.out.println("最大数="+max2); 
          	//一条语句实现 后面有排序更优
          	int max= (a>b? a : b)>c? (a>b? a : b):c;
          	System.out.println("最大值="+max);	
          }
      }

    运算符的优先级

  •  标识符的规则

  • 规则 必须遵守

  •  

    hsp //ok
    hsp12 //ok
    1hsp //错误, 数字不能开头
    h-s // 错误 , 不能有 -
    x h // 错误, 有空格
    h$4 // ok
    class //错误,class 关键字
    int // 错误 ,int 是关键字
    double //错误 ,double 是关键字
    public //错误 ,public 是关键字
    static //错误 ,static 是关键字
    goto //错误, goto 是保留字
    stu_name //ok

    规范 更加专业

  •  关键字 (不用背) 保留字

  •  

     

    Java 保留字:

    现有 Java 版本 尚未使用,但 以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留

    字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const


  • 键盘键入

    在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是Scanner

  • import java.util.Scanner;
    public class Input{
          public static void main(String[]args){
          	//演示接受用户的键入
          	//步骤
          	//Scanner类 表示 简单文本扫描器,在java.util包中
          	//1.引入/导入 Scanner类所在的包
          	//2.创建Scanner 对象,new是创建一个对象,
          	//myScanner 就是Scanner类的对象
          	 Scanner myScanner = new Scanner(System.in);
          	 //3.接收用户键入了,
          	 System.out.println("请输入名字");
          	 String name =myScanner.next();
          	 System.out.println("请输入年龄");
          	 int age =myScanner.nextInt();
          	 System.out.println("请输入薪水");
          	 double sal=myScanner.nextDouble();
          	 System.out.println("名字="+name+
          	 	"年龄="+age+"薪水="+sal);
    }
    
    
    }

    进制

  •  

    二进制 0b开头

    十六进制 0x开头

    进制的转换

    二进制转十进制

    0b10010 =》 0+1*2+1*(2*2*2*2)

    十进制转二进制


  •  

    二进制转八进制

    从低位开始,将二进制数每三位一组,转成对应的八进制数即可

    ob11010101 转成八进制

    ob11(3)010(2)101(5) => 0325

    八进制转二进制

    将八进制数每 1 位,转成对应的一个 3 位的二进制数即可

    0237 = 000 010 011 111

  • 位运算

  •  重点 1.负数的反码 原码符号位不变 其他位取反 2. 负数的补码 负数反码+1

  •  

  • &按位与 都1则1 |按位或 有1则1

  • public class BitOperator{
          public static void main(String[]args){
          //  计算2&3
          // 2的原码 00000000 00000000 00000000 00000010	
          // 2的补码 00000000 00000000 00000000 00000010	
          // 3的原码 00000000 00000000 00000000 00000011
          // 3的补码 00000000 00000000 00000000 00000011
          // 	00000000 00000000 00000000 00000010
          // 	00000000 00000000 00000000 00000011
          // &	00000000 00000000 00000000 00000010   (补码运算)
         //     00000000 00000000 00000000 00000010  原码
          System.out.println(2&3);//2
          //-2的原码 10000000 00000000 00000000 00000010
          //-2的反码 11111111 11111111 11111111 11111101
          // 补码    11111111 11111111 11111111 11111110
          // 取反    00000000 00000000 00000000 00000001  (补码运算)符号位为0 正数三码合一
          // 原码    00000000 00000000 00000000 00000001
          System.out.println(~-2);//1
          //2的原码 00000000 00000000 00000000 00000010
          //2的补码 00000000 00000000 00000000 00000010
          //  取反  11111111 11111111 11111111 11111101 (补码运算) 负数 补码-1等于反码 
          //  反码  11111111 11111111 11111111 11111100             反码符号位不变其他取反
          //  原码  10000000 00000000 00000000 00000011
          System.out.println(~2);//-3
    
    
          }
    
    
      }

    位运算 (1)>> (2)>>> (3)

  • 算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位

    算数左移

    无符号右移>>>:逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0

    没有这个符号<<<

  • public class BitOperator02{
          public static void main(String[]args){
          	System.out.println(1 >> 2);// 00000001=> 00000000   => 0
          	System.out.println(1 << 2);// 00000001=> 00000100   => 3
          	System.out.println(4 << 2);// 00000100=> 00010000   => 16 (4*2*2)
          	System.out.println(15>> 2);// 00001111=> 00000011   => 3 (15/2/2)
    
          }
      }

  • 练习题

     //a%b 当a是小数时,公式=a-(int)a/b*b

  • public class OperatorExercise{
          public static void main(String[]args){
          	//1.
          	System.out.println(10/3);//3
          	System.out.println(10/5);//2
          	System.out.println(10%2);//0
          	System.out.println(-10.5%3);
          	//a%b 当a是小数时,公式=a-(int)a/b*b
          	//-10.5%3 = -10.5-(int)-10.5/3*3
          	//-10.5-(-10)/3*3 => -10.5+9 =>-1.5 
          	//!!注意有小数参与运算,得到的结果是近似值
          	//-10.4%3 理论应该是等于 1.4 但结果是1.4000001
          	//2.
          	int i=66;
          	System.out.println(++i+i);//先自增 67 再 134
    
          }
      }

     

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值