Java菜鸟之java基础语法,运算符(三)
赋值运算符
(一)JAVA种的赋值运算符 = ,代表代表的等于,一般的形式是 左边变量名称 = 右边的需要赋的指或者表达式,如果左侧的变量类型级别比较高,就把右侧的数据转换成左侧相同的高级数据,然后再复制给左边的变量。否则需要用强制类型转换。
int a,b,c;
a = 13 ;
b = 12 ;
c = 12 ;
int i = 10 ;//强制类型转换
byte b = (byte)i;
/*
a = b +c ;
*/
(二)复合赋值运算符
为了简化程序,提高的编译的效率,运算符前面可以加上不通的运算符,构成了复合赋值运算符。包括+=,-=,*=,/=,%=,>>=.<<=.^=,丨=,>>>=。具体的例子如下
int a = 3 ;
a+=3 ;//a = a + 3;
上例中a+=3就相当于 a = a+3 ; 结果就是6 ,其余的复合运算符是一样的。其中>>=,<<=,>>>=代表的是位运算符,在下面会在介绍
逻辑运算符
逻辑运算是针对布尔类型进行的逻辑判断,结果仍然是布尔类型。逻辑运算符主要包括三个分别是 !(非)、&(与)。这三种类型的逻辑运算关系如下:
/* 逻辑关系 * 逻辑运算 含义 * A and B AB均为真,结果为真 * A OR B A,B中有一个为真,结果为真 * NOT A A为真,结果为假,取其相反的值 * * 逻辑运算符 * 运算符 用法 何时为true 附加特点 * && A&&B A和B都为TRUE 当A为false是,不用检查B ,结果为false * || A||B A 或B 有一个为true 当A = true ,则结果为true ,不用检查B 的真假 * ! !A A为false , 取A的相反值 * * 在逻辑运算符中有几个特点,在&&中,A为false时,则结果为false,不用在检查B的值。这是因为&&中只有当两个 * 数值都为真时,才为true,所以不用检查B 了。|或运算符时,当A为true时,则结果为true。 * */
关系运算符
关系运算符也称为比较运算符,主要用来比较两个数据之间的大小关系的运算符。关系运算符比较的结果是一个Boolean类型的的值,True 和false。有六种关系运算符,分别是>,<,==,>=,<=,!=,六种关系运算符和高中的数学的学的差不多,主要的不同是这里只有true和false,下面来仔细看一下这几个关系运算符。
运算符 功能 用法
== 用于判断两个数值是否相等 i==j
!= 数值不等于 A!=B
>= 大于等于 A>=B
<= 小于等于 A<=B
> 大于 A>B
< 小于 A<B
例子如下
int a = 2 , b = 3;
a == b; //a==b中 a和b不等,结果为false,相等时为true
a !=b ; // a不等于b结果为true,否则为false
a > b ; // 2<3,所以结果为false,反之为true
a < b ; // 2<3 ,所以 结果为true
a >= b ;// 2<3 ,所以结果为false
a <= b ;//2< 3 ,所以结果为true,当a==b时结果也为true
位运算符
位运算符主要针对的是二进制进行运算,也可以对整数和字符型进行运算。位运算符主要包括按位与(&),按位或(丨),按位异或(^),按位非(~).下面来了解一下这个几个运算符的运算法则。
在位运算中,对于十进制的数据,需要先把数据转换成二进制,之后按照位运算符的法则进行运算,之后把就算结果在转换成十进制数据。
按位与(&)
对于数据的按位与的运算法则是 ,当两个数据对应位置的值都是1时,则结果为1,否则为0.下面我们以6和5的来进行计算一下。
6 的二进制是 00000110 ,5 的二进制是00000101 00000110 & 00000101 00000100 把计算结果为4 6 的二进制是00000110 ,9的二进制是00001001 00000110 & 00001001 00000000 6和9的按位与运算结果为0 ,从一方面也可以看出按位与可以进行清0,但是 两个数据必须像6和9那样,两个数据对应的位是不同的。
按位或(丨)
在按位或的运算法则是,当两个数据对应的位都是0 ,则对应的结果为0,反之为1以 5丨6为例
6 的二进制是 00000110 ,5 的二进制是00000101 00000110 丨 00000101 00000111 把结果转换成十进制是7
按位非(~)
对于按位非,对于数据的位置是1,则对应为0,位置0时,则对应位是1.下面以6(只取低八位)为例
00000110 ~ 11111001 按位非 得到的结果11111001
将结果的二进制的结果是-7,因为byte类型的做高位为1,表示负数,0表示正数,所以这个数的结果是负数,又因为11111001的是-7的补码。
按位异或(^)
按位异或的运算法则是:如果两个数据对应的数据相同时,那么该对应的位数据位0,两个数据对应的值相反,那么对应的值为1.下面以6和9 为例
6 的二进制是 00000110
9的二进制是 00001001
00000110
^ 00001001
00001111
6和9 的异或是为00001111,转换为十进制为15,下面在进行下面的运算15^9
00001111
^ 00001001
00000101
把二进制的转换成十进制的结果为6,
从上面可以结果可以看出异或可以进行数据的基本加密和解密。
移位运算符
在计算机中参与运算的数有两大类:有符号数和无符号数。在计算机中的数一般都存在寄存器中,通常称寄存器的位数为机器字长。而无符号数就是没有符号的数即是在寄存器中每一位都可以都可以用来存储数据,它的范围是0 ~65535 。例如17为无符号数,在计算机中用二进制表示为20001。有符号数是最高位为符号位,它的范围是-32768 ~32767 。例如-17 是有符号数,在计算机中用最高位表示符号位,二进制的表示为10020001。现在来介绍以下JAVA中的移位运算符。移位运算符分为左移位运算符,右移位运算符和无符号的右移位运算符。
左移位运算符 (<<)
左移位运算符的运算法则是:高位左移后,右侧补0。例如6的左移1位的计算过程。6的二进制位00001000.左移移位之后00010000,转换成十进制为12.从这里可以看出左移移位移位之后相当于该数乘以2。左移N 为就为该数乘以N个2想乘。
右移位运算符(>>)
右移位运算符的运算法则是:低位右移后,右侧的高位补充符号位。如果是正数,则补充0。是负数则补充1.例如-6,-6的二进制表示为10001000,右移之后结果为11111100.因为右侧是为符号位所以补充1.转换十进制为-3.
无符号数的右移位运算符(>>>)
无符号数的移位法则: 右移后,左侧补0.也就是说一个数经过无符号右移后,得到的数一定是大于等于0 的数。例如-6的右移。-6的二进制表示为11111111 11111111 11111111 11111010 将它右移1位后变为01111111
11111111 11111111 11111101(右移1位之后,最高位补0),得到的这个二进制数转换为十进制之后结果为 2147483645
在移位运算符中需要注意下面这几个问题:
1 对于byte,short,char 类型的数据系统会默认把类型转换成int类型之后再进行移位。
2 对于整型数据A>>N系统会自动把N%32得到的余数进行右移几位。也就是说,对于一个int类型的数据A>>33和A>>1的值是一样的
3 对于long类型的数据a>>n,系统会自动把n%64得到的余数进行右移。
4 整数不断的右移最后的结果将得到0,而负数不断的右移运算最后的结果是-1.
条件运算符
三元运算符 ?,它包括三个数,格式为 表达式1?表达式2:表达式3;在java中表达式1如果为true,则返回表达式2反之返回表达式3 。例如下面的例子
int a = 2 ;
int b = 3 ;
int c = a>b?a:b;
这个计算的最好结果则是3.因为a>b为false,所以返回b的值。在这里需要注意的是当表达式2 和表达式3 的值的类型不一样时,返回精度比较准确的类型。
运算符的优先级
关于运算符可以分为一目运算符,二目运算符和三目运算符。具体的关系如下图