黑马程序员--Java语言基础组成 —运算符

 

 

2.4.4 运算符:

算术运算符

 

 

运算符

运算

范例

结果

+

正号

+3

3

-

负号

b=4; -b;

-4

+

5+5

10

-

6-4

2

*

3*4

12

/

5/5

1

%

取模

5%5

0

++

自增(前)

a=2;b=++a;

a=3;b=3

++

自增(后)

a=2;b=a++

a=3; b=2

——

——

自减(前)

自减(后)

a=2;b=——a;

a=2;b=a——;

a=1;b=1

a=1;b=2

+

字符串相加

“He”+”110”

“Hello”

 

 

例:

Int x=4279;

X=x/1000*1000;

 

结果为4000

分析:先运算x/1000,int型除以int型应该还是int型,所以是4,舍弃小数部分

      在运算4*1000,结果为4000

取模运算符:%:取得是余数

例:

10%3;结果为1

2%5   结果为2

规律:左边小于右边,结果是左边

      左边等于右边,结果是0

      右边是1,结果是0

      当出现负数时,只看左边,负号在左边结果为负

例:1%-5 结果为1

    -1%5 结果为-1

++(自增运算符)与—(自减运算符);

 

例:

int a=3,b;

b=a++;

System.out.println(a);

System.out.println(b);

结果为3 4

分析:

a++:是给a这个变量中的值进行一次加一操作,并把+1操作后的值重新付给a,就相当于a=a+1

b=a++;因为是a++,所以是先将a的值赋给b,然后a再自增

如果是++a,是先自增,然后再进行运算

字符串连接符:“+”

字符串数据和任何数据使用+都是相连接,最终都会变成字符串

例:

System.out.println(“5+5=”+5+5);

结果为:5+5=55;

如果要想5+5进行运算,可以把提高优先级

改为:System.out.println(“5+5=”+(5+5));

结果为:5+5=10;

 

 

转义字符:

通过\来转变后面字母或者符号的含义

\n:换行

\b:退格,相当于backspace

\r:按下回车键.windows系统中回车符是由两个字符来表示\r\n。

\t:制表符,相当于tab键

想在屏幕上打印带双引号的数据,不能直接使用””,双引号用于标志字符串的,所以需要转移”的含义:\”

System.out.println(“\”hello\””);

 

要打印两端都有\\的数据,需要转义\的含义:\\

System.out.println(“\\hello\\”);

赋值运算符

符号:

     =、+=、-=、*=、、=、%=

示例:

 

a+=5等同运算a=a+5;

a-=5等同运算a=a-5;

a*=5等同运算a=a*5;

a/=5等同运算a=a/5;

a%=5等同运算a=a%5;

 

short a=3;

s=s+2;

s+=2;

/*两种方式不同处是:

  1. s=s+2;这样写编译时是报错的,s+=2;用这种方法编译通过
  2. s=s+2; 是两次运算,先计算s+2,然后再复制:s是short类型,s+2被提升成int类型,运算完再赋给s,装不下了,会丢失精度, s+=2:就是一次运算,只做赋值运算,把左右两边值的和赋给左边,并且此种方式内部有自动转换动作,它就相当于short s=4;将4赋给s,进行自动转换

*/

 

比较运算符

运算符

运算

范例

结果

==

相等

4==3

false

!=

不等于

4!=3

ture

小于

4<3

false

大于

4>3

true

<=

小于等于

4<=3

false

>=

大于等于

4>=3

false

instainceof

检查是否是类的对象

‘Hello’instanceof String

ture

注1:比较运算符的结果都是boolean型,也就是要么是ture,要么是false

注2:比较运算符“==“不能误写成”=“,单等号是赋值运算符

 

 

逻辑运算符

运算符

运算

范例

结果

&

AND(与)

false&ture

false

|

OR(或)

False|ture

true

^

XOR(异或)

False^ture

true

!

Not(非)

!true

false

&&

AND(短路)

false&&ture

false

||

OR(短路)

False||ture

true

 

逻辑运算符用于连接boolean类型的表达式

true &true=true;

true &false=false;

false&true=false;

false &false=false;

&:只要两边的boolean表达式结果有一个为false,那么结果就是false

只有两边都为true,结果为true

true | true=true;

true | false=true;

false | true=true;

false | false=false;

|:两边只要有一个为true,结果为true,只有两边都有false,结果为false

 

^:异或:^就是和]|有点不一样

true ^true=false;

true ^ false=true;

false ^ true=true;

false ^ false=false;

^:两边相同结果是false

两边不同结果是true

 

&和&&的特点:

&:无论左边是是真是假,右边都运算

&&:当左边为假时右边不运算

 

|和||的特点

|:两边都参与运算

||:当左边为true,右边不运算

 

位运算符

位指的是2进制

运算符

运算

范例

<< 

左移

3 << 2 = 12  à3 * 2 * 2 = 12

>> 

右移

3 >> 1 = 1   à 3 / 2 = 1

>>> 

无符号右移

3 >>> 1 = 1  à3 / 2 = 1

&

与运算

6 & 3 = 2

|

或运算

6 | 3 = 7

^

异或运算

6 ^ 3 = 5

~

反码

~6 = -7

例:3<<2 相当于3*2(2)=12

是将3转换成2进制,然后向左移两位,末尾处补0,结果是:12

 

6>>2 相当于6/2(2)=1;舍弃小数部分

将6转换成2进制,然后向右移两位,高位补的要与最高位一致(是带符号右移),结果为:1

 

规律:

<<:其实就是乘以2的移动位数次幂

>>:就是除以2的移动的位数次幂,当结果为小数时,舍弃小数

 

无符号右移:

>>与>>>的区别

>>:最高位补什么由原有数据的最高位的值而定,如果最高位为0,右移后用0补空位,如果最高位是1,右移后用1补空位

>>:无论最高位是什么,右移后都用0补

 

位运算符&

6&3=2

先将6和3转换成2进制

然后运算:

 

位运算符|

 

6|5=7

先将6和5转换成2进制

然后在运算

 

位运算符^

6^5=

现将6和5转换成2进制

然后运算

 

例:7^4^4=7

 

结论:一个数异或同一个数两次,结果还是这个数本身

 

~反码:就是取反

~6=-7

先将6转换成2进制为:0000-0000-0000-0000-0000-0000-0000-0110

再取反为:            1111-1111-1111-1111-1111-1111-1111-1001

想算去取反后的这个输的值要减再取反

1111-1111-1111-1111-1111-1111-1111-1001

- 0000-0000-0000-0000-0000-0000-0000-0001

= 0000-0000-0000-0000-0000-0000-0000-1000

然后取反

1111-1111-1111-1111-1111-1111-1111-0111

结果为-7

 

练习

位运算练习:

  1. 最有效的方式算出2乘以8等于几?

最有效的方式是:按位运算,2<<3(2往左移3位)

  1. 对两个整数变量的值进行互换(不需要第三方变量)

方法1:使用第三方变量

int temp;

temp=n;

n=m;

m=temp;

 

方法2:

n=n+m;//如果n和m的值非常大,容易超出int范围

m=n-m;

n=n-m;

方法3:使用^运算符:原理是:一个数异或同一个数两次,结果还是这个数本身

n=n ^ m;

m=n ^ m;//(n ^ m) ^ m

n=n ^ m;//(n ^ m) ^ n;

 

 

用位运算符进行16进制转换

 

class  Num

{

    public static void main(String[] args)

    {

             int num=60;

             //获取60的最低4位,通过&15;

             int n1=num&15;

             System.out.println((char)(n1-10+'A'));

             //要获取下一组4位,将60右移4位

             int temp =60>>>4;

             //对temp的值进行最低四位的获取

             int n2 =temp & 15;

             System.out.println();

    }

}

 

 

三元运算符

格式:

(条件表达式)?表达式1:表达式2;

如果条件为false,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

例:

int x=1,y;

y=(x>1)?100:200;

System.out.println(“y=”+y);

结果:y=100

   

 

 

posted @ 2013-12-22 13:26  h19891117  阅读(168)  评论(0编辑  收藏  举报