Java基础-算术运算符(Arithmetic Operators)
Java基础-算术运算符(Arithmetic Operators)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
Java程序通过运算符实现对数据的处理,Java中的运算符包括:算数运算符,关系运算符,逻辑运算符,条件运算符,位运算符,移位运算符等等。本篇博客主要介绍算数运算符。算数运算符包括:“+,-,*,/,%,++,--”。
一.算数运算符的特点
1>.运算结果可能超出数据类型表示范围;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic{ 8 public static void main(String[] args){ 9 int num1,num2,result; 10 11 //运算结果可能超出数据类型表示范围 12 num1 = 2147483647; 13 num2 = 1; 14 15 result = num1 + num2; 16 System.out.println(result); //-2147483648 17 /** 18 num1的二进制为: 19 0111 1111 1111 1111 1111 1111 1111 1111 20 num2的二进制为: 21 0000 0000 0000 0000 0000 0000 0000 0001 22 + 23 ---------------------------------------------- 24 1000 0000 0000 0000 0000 0000 0000 0000 25 */ 26 27 num1 = -2147483648; 28 num2 = 1; 29 result = num1 - num2; 30 System.out.println(result); //2147483647 31 32 } 33 34 35 }
2>.整数相除结果为整数;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic1{ 8 public static void main(String[] args){ 9 10 //除法,整数相除,结果为整数,舍弃小数部分 11 System.out.println( 10 / 3 ); //3 12 System.out.println( 10 / -3 ); //-3 13 System.out.println( -10 / 3 ); //-3 14 System.out.println( -10 / -3 ); //3 15 } 16 17 18 }
3>.除数为0的情况;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic2{ 8 public static void main(String[] args){ 9 10 //除法,除数为0的情况 11 // System.out.println( 10 / 0 ); 12 /** 13 整数相除,0作为除数时,编译没有语法错误 14 运行时产生算术异常:java.lang.ArithmeticException: / by zero 15 注意: 16 整数相除时,保证除数不能为0. 17 */ 18 19 20 //小数相除时,除数为0运行通过,但是结果不是一个数。 21 System.out.println( 10 / 0.0 ); //Infinity,表示无穷大 22 System.out.println( 10 / -0.0 ); //-Infinity 23 System.out.println( -10 / 0.0 ); //-Infinity 24 System.out.println( 0 / 0.0 ); //NaN,表示Not a Number 25 System.out.println( -0 / 0.0 ); //NaN 26 27 } 28 29 30 }
4>.余数的符号和被除数一致;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic3{ 8 public static void main(String[] args){ 9 10 //求余,余数的符号与被除数的符号一致 11 System.out.println( 10 % 3 ); //1 12 System.out.println( 10 % -3 ); //1 13 System.out.println( -10 % 3 ); //-1 14 System.out.println( -10 % -3 ); //-1 15 } 16 }
5>.自增与自减;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic4{ 8 public static void main(String[] args){ 9 10 //自增与自减 11 /** 12 1>.自增与自减针对变量进行操作; 13 2>.自增就相遇变量的值加1,自减就是变量的值减1 14 */ 15 16 int x = 10; 17 x++; //相当于x = x + 1; 18 System.out.println(x); //11 19 20 x = 20; 21 x--; //相当于x = x - 1; 22 System.out.println(x); //19 23 24 } 25 }
6>.前缀与后缀的区别;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic5{ 8 public static void main(String[] args){ 9 10 int a; 11 //自增与自减有前缀和后缀两种形式 12 /** 13 ++a 这是前缀形式 14 a-- 这是后缀形式 15 区别: 16 前缀形式先自增后运算 17 后缀形式是先参与运算再自增 18 */ 19 a = 10; 20 int b = ++a; 21 /** 22 前缀形式: 23 1>.先把变量a的值取出来加1 24 a = a +1; 25 现在的a的值为11 26 2>.再把变量a的值11赋值给变量b 27 */ 28 System.out.println(b); //11 29 30 a = 20; 31 b = a++; 32 /** 33 后缀形式: 34 1>.先把变量a的值保存在一个临时变量中 35 int temp = a; //temp = 10 36 2>.变量a进行自增 37 a = a + 1 //a = 11 38 3>.实际上是临时变量参与计算 39 b = temp; //b = 10 40 */ 41 System.out.println(b); //20 42 } 43 }
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic6{ 8 public static void main(String[] args){ 9 10 //面试题: 11 int x =10; 12 x = x++; 13 System.out.println(x); //打印的结果为什么会是10呢? 14 15 /** 16 1>.int temp = x; //temp == 10 17 2>.等号右侧的变量x进行自增 18 x = x +1; //x = 11 19 3>.是把临时变量temp的值赋值给左侧的x变量 20 x = temp //x = 10 21 */ 22 } 23 }
7>.自增与自减隐含着强制类型转换;
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class Arithmetic7{ 8 public static void main(String[] args){ 9 10 //自增与自减隐含着强制类型转换 11 12 byte a = 10; 13 // a = a + 1; 14 /** 15 由于byte在运算的过程中会自动提升为整形,即左边的a是byte类型,而右边的a确是 16 int类型。因此会报错:“错误: 不兼容的类型: 从int转换到byte可能会有损失”。 17 */ 18 19 a++; //相当于 a = (byte)(a+1); 20 21 System.out.println(a); //11 22 23 char b = 'A'; 24 b++; //相当于b = (char)(b+1); 25 System.out.println(b); //B 26 27 28 } 29 }
8>.表达式的数据类型;
在进行算数运算时,整数,小数,字符都可以参与运算,整个算数表达式的数据类型是:
1>.如果有double类型数据参与运算,整个表达式就是double类型;
2>.否则,如果有float类型数据参与运算,整个表达式就是float类型;
3>.否则,如果有long类型参与算数运算,整个表达式就是lang类型;
4>.否则,整个表达式就是int类型;
补充:算数表达式就是用算术运算符链接起来的式子,如:"int num1 = 10; int num2 = 20; int res = num1 + num2; ",其中res的结果就是一个算数表达式。
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。
欢迎交流学习技术交流,个人微信: "JasonYin2020"(添加时请备注来源及意图备注)
作者: 尹正杰, 博客: https://www.cnblogs.com/yinzhengjie/p/8679721.html