Java学习笔记day1——运算符
/* 运算符 *算术运算符+ / - * % ++ -- *赋值运算符= += -= /= *= %= *比较、逻辑运算符 *位运算符 *三元运算符 */ class AriTest{ public static void main(String[] agrs) { //算数运算符 //1.除法************************************************************************ int num1=12; int num2=5; System.out.println(num1/num2);//结果为2,任然为int型 System.out.println(num1/num2*num2);//结果为10. //如何得到精确的值呢? double result1=num1/num2; System.out.println(result1);//结果为2.0,仍然不对 double result2=num1/(num2+0.0);//将num2变成double型,运算结果自动转换成double System.out.println(result2);//得到精确值 //2.取余************************************************************************** int m=12; int n=5; System.out.println("m % n = "+m%n); int m1=-12; int n1=5; System.out.println("m1 % n1 = "+m1%n1); //3.++(前后) int a1=10; int b1=a1++;//先赋值,后自增; System.out.println("a1 = "+a1+",b1 = "+b1);//a1=11,b1=10 int a2=10; int b2=++a2;//先自增,后赋值; System.out.println("a2 = "+a2+",b2 = "+b2);//a2=11,b2=11 //!!!!!!!!!!!!!!!!!!!!!自增不改变变量的数据类型!!!!!!!!!!!! short s1=10; //s1=s1+1;经典的错误,s1和整数常量1相加变成int类型; s1=(short)(s1+1); System.out.println(s1);//s1=11 s1++;//无需上述那么复杂的强制类型转换操作 System.out.println(s1);//s2=12 //由此引出一个问题: byte b3=127; b3++;//不改变数据类型,但是超过了byte的数据范围,循环回到下一位,即-128 System.out.println("b3= "+b3);//b3=-128 /* 练习题: 随意给出一个整数,打印显示他的个位数、十位数、百位数上的值; 格式如下: 数字XXX的情况如下: 个位数 十位数 百位数 例如:数字153的情况如下: 个位数:3 十位数:5 百位数:1 */ int num0=153; int arr[]= {0,0,0}; String str=""; int i=0; if(i==0) str="个位数:"; else if(i==1) str="十位数:"; else str="百位数:"; System.out.println("数字"+num0+"的情况如下:"); for(i=0;i<3;i++) { arr[i]=num0%10; num0/=10; System.out.println(str+arr[i]); } //赋值运算符 int i1=10; int j1=10; //连续赋值,和上面两行代码 int i2,j2; i2=j2=10; //前面也提到了,+=,-=,/=,*=,%=操作不会改变变量本身的数据类型。 short s=10; //s=s+2;编译不通过,s变量类型变为int s+=2;//编译通过,不改变s的数据类型 //练习2********************************************************* int m0=2; int n0=3; n0*=m0++;//关键在于运算符的优先级问题.++在后,因此应该先进行赋值运算,再对m0进行自增运算 System.out.println("m0="+m0);//m=2+1 System.out.println("n0="+n0);//n=3*2 //这些题在开发中基本上遇不到,没必要画过多精力理解. //比较运算符 ==,!=,<,>,<=,>=;比较运算符的运算结果是布尔型的。 System.out.println(i1==j1);//判断i1和j1是否相等 System.out.println(i1=j1);//将j1赋值给i1,并输出i1 /*逻辑运算符:只适用于布尔型的变量之间的运算,且运算结果也为布尔型。 逻辑与& 短路与&&; 逻辑或| 短路或||; 逻辑非! 短路非^; */ //逻辑与和短路与: boolean bb=false; int numb=10; if(bb & (numb++>0)) { System.out.println("我家在北京"); }else { System.out.println("我家在南京"); } System.out.println("numb="+numb);//逻辑与运算,numb++后numb由10变成11 boolean bb1=false; int numb1=10; if(bb1 && (numb1++>0)) { System.out.println("我家在北京"); }else { System.out.println("我家在南京"); } System.out.println("numb1="+numb1);//短路与运算,当已知一个变量是false时,不再看另一个变量就可直接得出结果(false),因此numb1++不执行,numb1=10 //同理就很容易推到逻辑或和短路或的区别:短路或在已知一个变量为true时,不再看另一个变量而直接给出结果(true);其他情况下和逻辑与没有区别。 bb=bb1=true; if(bb | (numb++>0)) { System.out.println("我家在北京"); }else { System.out.println("我家在南京"); } System.out.println("numb="+numb);//逻辑或运算,numb++后numb由11变成12 if(bb1 || (numb1++>0)) { System.out.println("我家在北京"); }else { System.out.println("我家在南京"); } System.out.println("numb1="+numb1);//短路或运算,当已知一个变量是false时,不再看另一个变量就可直接得出结果(false),因此numb1++不执行,numb1=10 //!!!!!!!!!!!!!!!!!开发中推荐使用短路与、短路或!!!!!!!!!!!!!! //练习************************************************************************************************** int x,y; x=y=1; if(x++==2 & ++y==2)//x++=1,++y=2, false&true=false x=7; System.out.println("x="+x+",y="+y);//x=2,y=2 int x1,y1; x1=y1=1; if(x1++==2 && ++y1==2)//x1++=1, false短路不再判断继续下一个关系式,得到结果false x1=7; System.out.println("x1="+x1+",y1="+y1);//x1=2,y1=1 int x2,y2; x2=y2=1; if(x2++==1 | ++y2==1)//x2++=1,++y2=2; true|false=true x2=7; System.out.println("x2="+x2+",y2="+y2);//x2=7,y2=2 int x3,y3; x3=y3=1; if(x3++==1 || ++y3==1)//x3++=1,true,短路或不再继续判断下一个关系式,返回结果true x3=7; System.out.println("x3="+x3+",y3="+y3);//x3=7,y3=1 //面试题***************************************************************************************************** boolean x0=true; boolean y0=false; short z=42; if((z++==42)&&(y0=true)) //z++==42,z=43,true; 注意y0=true不是关系表达式,是给y0赋值为true; z++; //显然条件满足,z++,z=44; if((x0=false)||(++z==45)) //同样的,x0=false是一个赋值语句,短路与左边为false,需要看右式;++z=45,z=45,true; z++; //条件成立,z++,z=46 System.out.println("z="+z);//z=46 //位运算符 左移<< 右移>> 无符号右边移>>> 与& 或| 抑或^ 取反~ 位运算符是直接对二进制数进行运算的 int i0=21; System.out.println("i0 << 2: "+(i0 << 2));//左移两位,在一定范围内,即乘以2的2次方。 System.out.println("i0 << 26: "+(i0 << 26));//此时仍在该范围内,得到2的26次方倍的i0; //int共4X8=32个bit,因此21=0000 0000 0000 0000 0000 0000 0001 0101,左移27位,刚好最高位变为1(符号位) System.out.println("i0 << 27: "+(i0 << 27)); /* 经典面试题:最高效方式的计算:2*8? 答:2<<3 或 8<<1 */ //练习:交换两个变量的值 //方法1: int numb_1=10; int numb_2=20; int temp=numb_1; numb_1=numb_2; numb_2=temp; System.out.println("numb_1="+numb_1+",numb_2="+numb_2); //方法2:不用定义临时变量;但是相加操作可能超出存储范围;且只能适用于数值类型。 numb_1=numb_1+numb_2; numb_2=numb_1-numb_2; numb_1=numb_1-numb_2; System.out.println("numb_1="+numb_1+",numb_2="+numb_2); //方法3:使用位运算符。只适用于数值类型 numb_1=numb_1^numb_2; numb_2=numb_1^numb_2; numb_1=numb_1^numb_2; System.out.println("numb_1="+numb_1+",numb_2="+numb_2); //三元运算符: (条件表达式)?表达式1:表达式2; 实质上就是一个if-else语句 int m_1=20; int m_2=6; int max=(m_1>m_2)?m_1:m_2;//表达式1、2必须类型一致或类型可以统一为一种。 System.out.println("max="+max); //********************************************* //获取三个数中的最大值 int q1=12; int q2=30; int q3=-43; int max1=(q1>=q2)?q1:q2; int max2=(max1>=q3)?max1:q3; System.out.println("三个数中最大值是:"+max2); } }
分类:
Java学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~