在Java中,使用算术运算符+
、-
、*
、/
表示加、减、乘、除运算。
当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。
整数的求余操作(有时称为取模)用%
表示。例如,15/2等于7,1542等于1.15.0/2等于7.5。
需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
在Math类
中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。
平方根
,可以使用sqrt()
方法:double x = 4;
double y = Math.sqrt(x);
Systen.out.println(y); // 输出2.0
幂运算
,因此需要借助于Math类的pow(
)方法。以下语句:double y = Math.pow(x, a);
将 y的值设置为x的a次幂(xax^axa)
pow方法有两个double类型的参数,其返回结果也为double类型。
三角函数
:public static double sin(double a) //求正弦值,-1.0到1.0的值
public static double cos() //返回余弦值,-1.0到1.0的值
public static double tan(double a)//a以弧度表示的角度 //用于计算正切
public static double atan(double a2)//a2弧切线的值 //用于计算反正切,返回的角度范围在 -pi/2 到 pi/2 之间
指数函数
以及它的反函数
——自然对数以及以10为底的对数:public static double exp(double x) //e^x
public static double log(double x) //ln(x)
public static double log10(double x)//log 10(x)
表示π和e常量
的最接近的近似值:Math.PI; //π
Math.E; //e≈ 2.718
不必在数学方法名和常量名前添加前缀
Math
,只要在源文件的顶部加上下面这行代码就可以了。
import static java. lang.Math.*;
接着就可以直接使用了:System.out.println("The square root of π is " + sqrt(PI));
实线箭头
,表示无信息丢失的转换;另外有3个虚线箭头
,表示可能有精度损失的转换。当用一个二元运算符连接两个值时(例如n+f,n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
- 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
- 否则,如果其中一个操作数是long类型,另一个操效将会转换为long类型。
- 否则,两个操作数都将被转换为int类型。
虽然在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也需要将double转换成int。
在Java中,允许进行这种数值之间的类型转换,当然,有可能会丢失一些信息。这种可能损失信息的转换要通过强制类型转换(cast)来完成。
强制类型转换
的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名
。double x = 9.997;
int nx = (int)x;
//变量x的值为9,因为强制类型转换通过截断小数部分将浮点值转换为整型。
对浮点数进行舍入运算
,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round()
方法:double x = 9.997;
int nx = (int) Math.round(x);
//变量nx的值为10
当
调用round
的时候,仍然需要使用强制类型转换
(int)。其原因
是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。
可以在赋值中使用二元运算符,这是一种很方便的简写形式。
x += 4; //等价于 x = x + 4;
//一般来说,要把运算符放在=号左边,如*=或-=
//如果x是一个int
x += 3.5; //合法,将把x设置为(int)(x+3.5)
运算符放在操作数后面
的"后缀"形式 : n++
将变量n的当前值加1,n--
则将n的值减1。int n = 12;
n++; //将n的值改为13
4++; //这就不是一个合法的语句
运算符放在操作数前面
的"前缀"形式 : ++n
与--n
表达式中
时,二者就有区别
了。 int m = 7;
int n = 7;
int a = 2 * ++n; // now a is 16, n is 8
int b = 2 * n++; // now b i5 14, n i5 8
运算符 | 规则 |
---|---|
== | 两个操作数的值如果相等则条件为真 |
!= | 两个操作数的值如果不相等则条件为真 |
> | 左操作数的值大于右操作数的值,条件为真 |
< | 左操作数的值小于右操作数的值,条件为真 |
>= | 左操作数的值大于等于右操作数的值,条件为真 |
<= | 左操作数的值小于等于右操作数的值,条件为真 |
public class Test {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("a == b = " + (a == b) );System.out.println("a != b = " + (a != b) );System.out.println("a > b = " + (a > b) );System.out.println("a < b = " + (a < b) );System.out.println("b >= a = " + (b >= a) );System.out.println("b <= a = " + (b <= a) );}
}
/*运行结果:
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
*/
与或非
)运算符 | 名称 | 规则 |
---|---|---|
&& | 逻辑与 | 当且仅当两个操作数都为真,条件为真 |
|| | 逻辑或 | 两个操作数任意一个为真,条件为真 |
! | 逻辑非 | 反转操作数的逻辑状态,如果条件为true,则逻辑非运算符将得到false |
public class Test {public static void main(String[] args) {boolean a = true;boolean b = false;System.out.println("a && b = " + (a&&b));System.out.println("a || b = " + (a||b) );System.out.println("!(a && b) = " + !(a && b));}
}
/*运行结果:
a && b = false
a || b = true
!(a && b) = true
*/
?:
)variable x = (expression) ? value if true : value if false
public class Test {public static void main(String[] args){int a , b;a = 10;// 如果 a 等于 1 成立,则设置 b 为 20,否则为 30b = (a == 1) ? 20 : 30;System.out.println( "Value of b is : " + b );// 如果 a 等于 10 成立,则设置 b 为 20,否则为 30b = (a == 10) ? 20 : 30;System.out.println( "Value of b is : " + b );}
}
/*运行结果:
Value of b is : 30
Value of b is : 20
*/
从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。
int a = 35;
int b = 47;
int c = a + b;
//计算两个数的和,因为在计算机中都是以二进制来进行运算,
//所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
————————————————————
82: 0 1 0 1 0 0 1 0
按位与
运算符(&
)两位同时为1,结果为1,否则结果为0
0&0=0 0&1=0 1&0=0 1&1=1注意:负数按补码形式参加按位与运算
if ((a & 1) == 0)
代替if (a % 2 == 0)
来判断a是不是偶数。按位或
运算符(|
)参加运算的两个对象只要有一个为1,其值为1
0|0=0 0|1=1 1|0=1 1|1=1注意:负数按补码形式参加按位或运算
异或
运算符(^
)两个相应位相同为0,相异为1
0^0=0 0^1=1 1^0=1 1^1=0
1、交换律
2、结合律 (a ^ b) ^ c == a ^ (b ^ c)
3、对于任何数x,都有 x ^ x=0,x ^ 0 = x
4、自反性: a ^ b ^ b=a ^ 0 =a;
void Swap(int &a, int &b){if (a != b){a ^= b; //a1 = a ^ b //运算结束后,a的值是a1b ^= a; //b1 = b ^ a1 = b ^ (a ^ b) = a //此时a的值是a1,运算结束后b的值是b1a ^= b; //a2 = a1 ^ b1 = (a ^ b) ^ a = b //此时a的值是a1,b的值是b1,运算结束后a的值是a2//上面注释中的a1,b1分别表示此时此刻a与b的值,是为了更好理解}
}
取反
运算符(~
)二进制数按位取反,即将0变1,1变0
~1=0
~0=1
左移
运算符(<<
)二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
- 设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
- 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移
运算符(>>
)二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃
- 例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
- 操作数每右移一位,相当于该数除以2。
复合赋值
运算符位运算符与赋值运算符结合
)&= 例:a&=b 相当于 a=a&b
|= 例:a|=b 相当于 a=a|b
>>= 例:a>>=b 相当于 a=a>>b
<<= 例:a<<=b 相当于 a=a<
与C或C++不同,Java不使用逗号运算符
下一篇:快乐度假,文明不放假