算数运算符
/ 除法
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 } }