您的位置:首页 > 其它

第三章 操作符

2016-07-18 18:25 274 查看

概要

在本章中,主要介绍了关于操作符的一些基本概念,主要包括以下知识点:

操作符优先级、赋值的概念

算术操作符、自动递增和递减、关系操作符、逻辑操作符、直接常量、按位操作符、三元操作符、字符串操作符(“+”和“+=”)、类型转型操作符。

下面是本章记录的要点:

基本类型的赋值是直接把一个地方的值赋值到了另一个地方,而对象的赋值是赋值引用。这就意味着,如果c=d,那么c和d都指向了原本只有d指向的那个对象,在方法传参的时候,也是这种概念,传入的实际上是这个对象的引用。

一切皆为对象,但在JAVA中,操控的是对象的引用,但对于基本类型数据,则不是这样的。

算术操作符有以下几个:加(+)、减(-)、乘(*)、除(%)。值得注意的是,我们的整数在使用%号的时候,是不会四舍五入的取值,而是直接舍去小数位。

我们通过Random生成随机数,有下面两种初始化情况需要注意:

Random random = new Random();//在初始化的时候,我们没有传入一个随机种子数,那么每次运行的时候,都会生成任意数字。

Random random2 = new Random(55);//在初始化的时候,我们插入了一个随机数种子,那么在每次运行的时候,都会生成同样一组随机数字。


我们有“与”(&&)、“或”(||)、“非”(!)几个逻辑操作符,值得注意的是,我们的与和或操作符是短路操作,也就是当运行结果已经确认时,就不会执行后面的逻辑判断。

我们通过直接常量来指导编译器判断要生成什么样的类型:如果是一个Long类型数字,那么我们在数字后面加上字母“L”,如果是一个float类型的数据,我们在数字后面加上字母“f”,如果是double类型的数据,我们在其后面加上“d”。而对于八进制,则用前缀0加上0-7数字组成,十六进制的话,就是0x前缀加上0-9以及a-f字母。

我们通过1.39e33这种方式来表示小数。其中e33代表的是10的33次方,这里的e并不是自然对数的基数

按位操作符有这几个:与(&)、或(|)、异或(^)、非(~)。其中对于与,如果两个输入为只要有一个为1,则与生成输出位是1。只有两个输出位是0的情况下,或才会生成一个输出位0,否则都是1。如果输出位某一个是1,但不全是1,那么异或生成一个输出位1。对于非,则是取反操作。&=、|=、^=是合法的,但~=是非法的,因为~是单目操作符。

类型扩展中,如果是向大的基本类型转换,则编译器能够自动转化,如果向小类型数据转化,因为会丢失数据,所以我们要手动强制转换。 值得注意的是,boolean类型是不能进行任何类型转换的。long、double、转换成int类型的时候,会直接省去小数,要想四舍五入,我们可以使用math.round()方法。当一个较小的类型和一个较大类型做运算的时候,会自动提升为较大类型数据。如:

int a;<float c;c=a*c//这里会自动转化成c


移位操作符:在了解移位操作符前,我们先了解下原码和补码的概念。举例15和-15:

15 的原码: 00000000 00000000 00000000 00001111

补码: 11111111 11111111 11111111 11110000

+1 =

-15的原码:11111111 11111111 11111111 11110001

负数的原码即为:正数的原码取反,再加1。

<2>位移操作:(只针对 int类型的数据有效,java中,一个int的长度始终是32位,也就是4个字节,它操作的都是该整数的二进制数).也可以作用于以下类型,即 byte,short,char,long(当然,它们都是整数形式)。当为这四种类型是,JVM先把它们转换成int型再进行操作。

“<<” 左移

“>>” 右移

“>>>” 无符号右移

“<<” 和”>>”为数值位移,”>>>”为逻辑位移。【注】:Java中不存在”<<<”。

a> m”<<”n的含义:把整数m表示的二进制数左移n位,高位移出n位都舍弃,低位补0. (此时将会出现正数变成负数的形式)

实例:

3”<<2”剖析:

3二进制形式: 00000000 00000000 00000000 00000011,按照a的原理,得到00000000 00000000 00000000 00001100,即为12.

左移使整数变为负数:

10737418<<8

10737418二进制表示形式:00000000 10100011 11010111 00001010,按照a的原理,得到10100011 11010111 00001010 00000000,即为:-1546188288.

b m>>n的含义:把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1.

实 例:

3>>2剖析:

3二进制形式: 00000000 00000000 00000000 00000011,按照$2的原理,得到00000000 00000000 00000000 00000000,即为0.

-3>>2剖析:

-3二进制形式: 11111111 11111111 11111111 11111101,按照b的原理,得到11111111 11111111 11111111 11111111,即为-1.

以上:每 个整数表示的二进制都是32位的,如果右移32位和右移0位的效果是一样的。依次类推,右移32的倍数位都一样。

备注:对于右移32位与右移0位是结果是一样的,我一直不能够理解。现在我只能理解为32比较特殊。相当于整体全移。与移0位相同。左移也是一样的。

c m>>>n:整数m表示的二进制右移n位,不论正负数,高位都补零。

实例:

3>>>2剖析:

3二进制形式: 00000000 00000000 00000000 00000011,按照c的原理,得到00000000 00000000 00000000 00000000,即为0.

-3>>>2剖析:

-3二进制形式: 11111111 11111111 11111111 11111101,按照$3的原理,得到00111111 11111111 11111111 11111111,即为1073741823.

【注】:对于a,b,c,如果n为负数:这时JVM会先让n对32取模,变成一个绝对值小于32的负数,然后再加上32,直到 n 变成一个正数。

实例:

4<<-10

4的二进制形式:00000000 00000000 00000000 00000100,-10对32取模再加上32,不用说了,得到22,则4<<-10,即相当于4<<22。

此时按照再按照$1原理,得到00000001 00000000 00000000 00000000,得到的即为:16777216。

OK, 大功告成。

综上所述:

m”<<”n即在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方.

m>>n即相当于m除以2的n次方,得到的为整数时,即为结果。如果结果为小数,此时会出现两种情况:(1)如果m为正数,得到的商会无条件 的舍弃小数位;(2)如果m为负数,舍弃小数部分,然后把整数部分加+1得到位移后的值。

接 下来在此说说位操作的好处,速度超快,这些都是底层的二进制机器操作指令。

比如:a*2,

1.jvm先为变量a分配空间;

2.再进行a*2的操作;

3.再把结果返回给相应的变量。


而 a<<1,和a*2一样,它只需要一条指令即可,速度很快。当然前三种位移操作都是对2的倍数

进行操作时可用。

再 进行些许补充,谈到位操作,当然还要说到四个操作符:~(按位非),|(按位或),&(按位

与),^(按位异或),这些都是大学 计算机基础用法,对整数的二进制形式进行操作,然后再

转换为整数,具体操作如下。

1.~(按位非):【解义】对该整数的二进制形 式逐位取反。

~4:(一元操作符)

4的二进制形式为:00000000 00000000 00000000 00000100,逐位取反后得

到:11111111 11111111 11111111 11111011,即为-5.

2.| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1

等。

4|-5:

4的二进制形式为:00000000 00000000 00000000 00000100,

-5的二进制形式为:11111111 11111111 11111111 11111011,

逐位进行逻辑或运算:11111111 11111111 11111111 11111111,即得到-1.

3.&(按位与):【解义】对两个整数的二进制形式逐位进行逻辑与 运算,原理:1|0=0,0|0=0,1&1=1;0&1=0等。

4&-5:

4的二进制形式为:00000000 00000000 00000000 00000100,

-5的二进制形式为:11111111 11111111 11111111 11111011,

逐位进行逻辑与运算:00000000 00000000 00000000 00000000,即得到0.

实际应用:可以把字节转换为整 数,-64&0xFF=192,也可以用八进制的形式,-64&0377=192、

其实0xFF和0377都表示的是整数255、

4.^(按 位异或):【解义】对两个整数的二进制形式逐位进行逻辑异或运算,原理:1^1=0,1^0=1,0^1=1,0^0=0.

4^-5:

4的二进制形式为:00000000 00000000 00000000 00000100,

-5的二进制形式为:11111111 11111111 11111111 11111011,

逐位进行逻辑异或运算:11111111 11111111 11111111 11111111,即得到-1.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: