第三天(上)运算符

运算符


    在JAVA中,

    使用算数运算符 +-*/表示加减乘除  

    用%表示取余 mod 也称 取模运算符

    当/号两边都是整数的时候为整数除法,否则为浮点数除法

        注意:整数被0整除会产生异常,浮点数被0整除,会出现无穷大或者NaN.

    赋值运算符 等于好 =  将右边边的值赋给左边的变量

二元算数运算符


    例如x+=4等价于x=x+4 同样有-= *= /=等等符号

    一般将运算符放在等号左边   ( 可以看作将等号左边的内容移动到等号右边,左边在加一个x)

自增运算符与自减运算符


    因为加一和减一是常见的操作,所以java借鉴了c中的自增和自减 

    n++ 当前值加一 

    n--  当前值减一   

        注意++ --改变是变量的值,操作不能是数值.


    上面是后缀形式,相应的也有前缀形式

    ++n

    --n

    两种都表示加一和减一但是 

        前缀是先进性加1 因为他是前缀吗 (笑)

        后缀则是先用原来的值,运算完然后再加1.

  int n = 7;

  int m = 7;

  int a = 2*++m;//现在 a是16 m是8

  int b = 2*n++;//现在b是14 n是8

关系运算符和boolean运算符

java中包含各种关系运算符 又叫比较运算符常见的大于小于等

    ==检测是否相等

    !=检测是否不相等

    沿用c的习惯 

    &&表示短路与

    ||表示短路或

    !表示逻辑非 

        注意在java中&&和||是按照短路的方式求值的,如果第一个已经可以确定表达式的值,那么久不会进行第二个运算.这样可以避免一些错误的发生.

    例如 x!=0&&1/x  当x为零时不会计算1/x

           同样当expression||expresstion2 第一个为真是自动为真 不会计算第二个

&&与& ||与|的区别 

    & |判断完第一个表达式后还会判断第二个 而短路不会,因此一般使用短路与和短路或节省时间 同时&|也是位运算符

操作符 描述  假设布尔变量A为真,变量B为假 例子
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 (A && B)为假。
| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 (A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 !(A && B)为真。

三目运算符 又叫条件运算符

?:   

布尔表达式?表达式1:表达式2

    例如 x<y?x:y 当条件为真时计算第一个表达式,否则返回第二个表达式. 这里为求xy中比较小的那一个.

位运算符

1.与运算符

与运算符用符号“&”表示,其使用规律如下:

两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。

public class data13

{

public static void main(String[] args)

{

int a=129;

int b=128;

System.out.println("a 和b 与的结果是:"+(a&b));

}

}

运行结果

a 和b 与的结果是:128

下面分析这个程序:

“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。


2.或运算符

或运算符用符号“|”表示,其运算规律如下:

两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。

public class data14

{

public static void main(String[] args)

{

int a=129;

int b=128;

System.out.println("a 和b 或的结果是:"+(a|b));

}

}

运行结果

a 和b 或的结果是:129

下面分析这个程序段:

a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

 

3.非运算符

非运算符用符号“~”表示,其运算规律如下:


如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。

public class data15

{

public static void main(String[] args)

{

int a=2;

System.out.println("a 非的结果是:"+(~a));

}

}

 运行结果a非的结果为13

a的二进制为0010 根据非的运算规律结果为1101 为13


4.异或运算符

异或运算符是用符号“^”表示的,其运算规律是:

两个操作数的位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。

public class data16

{

public static void main(String[] args)

{

int a=15;

int b=2;

System.out.println("a 与 b 异或的结果是:"+(a^b));

}

}

运行结果

a 与 b 异或的结果是:13

分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

移位运算符

移位运算符操作的对象是二进制位,可以单独用移位运算符来处理int类型

运算符 含义 例子
<< 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) x<<3
>> "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. x>>3
>>> "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0. x>>>3

注:x<<y 相当于 x*2;x>>y相当于x/2y

    从计算速度上讲,移位运算要比算术运算快。

    如果x是负数,那么x>>>3没有什么算术意义,只有逻辑意义。

运算符优先级

由高到低

类别由高到低 操作符 关联性
后缀 () [] . (点操作符) 左到右
一元 + + - !〜 从右到左
乘性  * /% 左到右
加性  + - 左到右
移位  >> >>>  <<  左到右
关系  >> = << =  左到右
相等  ==  != 左到右
按位与 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 | | 左到右
条件 ?: 从右到左
赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
逗号 左到右

补充:

字符串运算符: + 可以连接不同的字符串。

转型运算符: () 可以将一种类型的数据或对象,强制转变成另一种类型。如果类型不相容,会报异常出来。


猜你喜欢

转载自blog.51cto.com/10760006/2153076