java语言基础(13)——运算符基本用法(算数、赋值、比较、逻辑、位运算符)
算数运算符:
+ - * / % ++ --
class Operator
{
public static void main(String[] args){
int x = 3;
int y = 4;
System.out.println(x+y); // 7
System.out.println(x-y); // -1
System.out.println(x*y); // 12
System.out.println(x/y); // 0 整数相除,只能得到整数
// 若要得到浮点数,把其中任意一个数字变成浮点数,如下:
System.out.println(x*1.0/y); // 0.75
System.out.println(x%y); // 取余 3
// ++ --
// 1单独使用 在变量前后效果一样
x++; // 或 ++x;
y--; // 或 --y;
System.out.println(x);//4
System.out.println(x);//3
// 2参与运算时使用
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = a++;// 后++ 先赋值再++
int f = b--;// 后-- 先赋值后--
int g = --c;// 前-- 先--再赋值
int h = ++d;// 前++ 先++再赋值
System.out.println("---------");
System.out.println(a);//2
System.out.println(b);//1
System.out.println(c);//2
System.out.println(d);//5
System.out.println(e);//1
System.out.println(f);//2
System.out.println(g);//2
System.out.println(h);//5
}
}
赋值运算符:
= += -= *= /= %=
int x = 1; 普通的赋值
x += 10; 把x与10相加再赋值给x
x -= 10; 把x与10相减再赋值给x
同理 *= /= %= 都是如此
注意 x +=10 与 x = x+10 的区别,比如:
class Operator
{
public static void main(String[] args){
// byte b = 1;
// b = b+1; // 报错 可能损失精度
// 因为byte b 在运算是转为了int
// 现在要用byte类型的b接收,所以会报错
//System.out.println(b);
byte b = 1;
b += 1;
System.out.println(b); //2
// 可见 b += 1;并不等价于 b=b+1
b+=130;
System.out.println(b);//-124
//由此可见 b+=1 等价于 b=(byte)b+1;默认做了强制转换
}
}
比较运算符:
== != > >= < <=
特点:无论表达式简单与否,返回的结果是boolean值
注意:== 不可写为=
逻辑运算符:
逻辑运算符,用于连接布尔型表达式或值,即两边的表达式必须都返回布尔值
& | ^ ! && ||
& and(与) | or(或) ^ xor(异或)
注意:^ xor(异或) 相同则为false 不同则为true
false ^ false = false
false ^ true = true
true ^ false = true
true ^ true = false
&& 与 & 的区别 || 与 | 的区别
& | 会把左右两边的表达式都运算完
而 && 当左边表达式为真时,才会运算右边,|| 当左边表达式为假时,才会运算右边
位运算符:
注意:要做位运算,首先把数据转换为二进制补码,运算完后转回原码。
& 与(都为1则为1) | 或(有1则1) ~ 取反(1变0,0变1) ^ 异或(相同则为0,不同则为1)
根据前面学习的原码,反码,补码的知识,很容易得出运算结果。
^ 异或的特点:一个数据对同一个(另外一个)数据异或两次,其本身不变。
位异或运算的小应用(两个数互相交换其值):
class Operator
{
public static void main(String[] args){
// 一个数据对另一个数据异或两次,其本身不变的小应用,
// 交换两个数的值
int a = 10;
int b = 20;
a = a^b;
b = a^b; //等量代换 a a^b^b 结果是a 此句是把a赋值给b
a = a^b; //等量代换 a a^b^a 结果是b 此句是把b赋值给a
System.out.println(a);//20
System.out.println(b);//10
}
}
<< 左移 >> 右移 >>> 无符号右移
注意是补码运算否则容易搞混
左移:数据往左移动,左边最高位丢弃,右边用0补齐;
右移:数据向右移动,空缺位补0,最高位是1的,最高位补1;
无符号右移:无论最高位是0还是1,空缺位都用0补齐。结果永远是正数
3<<2; // 12 相当于 3*2的2次方
8>>2; // 2 相当于 8/2的2次方
三目运算符:
格式:表达式1?表达式2:表达式3;
如果表达式1的结果是true,则最终运算结果取表达式2的结果,否则取表达式3的结果。
版权声明
本文仅代表作者观点,不代表博信信息网立场。