点号运算符的作用(用算符的理解之位用算符与三元用算符)
点号运算符的作用(用算符的理解之位用算符与三元用算符)例如:153的二进制是10011001,46的二进制是00101110,这两个数按位与运算的方法如下,括号中的是十进制数。0&0=0 0&1=0 1&0=0 1&1=1说明:Java的位运算符中,“~”非运算是一元运算符,除此之外的都是二元运算符。1.“按位与”运算“按位与”运算的运算符为“&”,&是二元运算符。“按位与”运算的运算法则是:如果两个整型数据a、b对应位都是1,则该位结果才是1,否则为0。即
位运算符
位运算符用于处理整形和字符型的操作数。位运算是完全针对二进制位(bit)单位的操作。Java语言提供的位运算符如表1所示。
表1 逻辑运算符
图一、逻辑运算符
说明:Java的位运算符中,“~”非运算是一元运算符,除此之外的都是二元运算符。
1.“按位与”运算
“按位与”运算的运算符为“&”,&是二元运算符。“按位与”运算的运算法则是:如果两个整型数据a、b对应位都是1,则该位结果才是1,否则为0。即
0&0=0 0&1=0 1&0=0 1&1=1
例如:153的二进制是10011001,46的二进制是00101110,这两个数按位与运算的方法如下,括号中的是十进制数。
10011001(153)
& 00101110(46)
---------------------------------
00001000(8)
2.“按位或”运算
“按位或”运算的运算符为“|”,它是二元运算符。“按位或”运算的运算法则是:如果两个操作数对应位都是0,则该位的结果才是0,否则为1。即
0|0=0 0|1=1 1|0=1 1|1=1
例如:153的二进制是10011001,46的二进制是00101110,这两个数按位进行或运算的方法如下,括号中的是十进制数。
10011001(153)
| 00101110(46)
---------------------------------
10111111 (191)
3.“按位取反”运算
“按位取反”运算也称“按位非”运算,运算符为“~”,~为一元运算符。它的运算法则是操作数二进制中的1修改为0,0修改为1。即
~0=1 ~1=0
例如:153的二进制是10011001,把它按位取反的结果为01100110
4.“按位异或”运算
“按位异或”运算的运算符位“^”,^为二元运算符。“按位异或”运算的运算法则是:当两个操作数的二进制对应位相同(同时为0或同时为1)时,结果为0,否则为1。即
0^0=0 0^1=1 1^0=1 1^1=0
例如:153的二进制是10011001,46的二进制是00101110,这两个数按位进行异或运算的方法如下,括号中的是十进制数。
10011001(153)
^ 00101110(46)
---------------------------------
0110111(183)
5.位移运算
除了上述按位运算符之外,还可以对数据按二进制位进行移位操作,Java中的移位运算符有三种:
q << 左移
q >> 右移
q >>> 无符号右移
左移就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数,左边移空的部分补0。右移则复杂一些。当使用“>>”符号时,如果最高位是0,左移空的位就填入0;如果最高位是1,右移空的位就填入1。如图1所示。
图1 右移
三元运算符
三元运算符使用格式为:
条件式?值1:值2
三元运算符的运算规则为:若条件式的值为true,则整个表达式取值1,否则取值2。例如:
int x = 1;
int y = 2;
int num = x < y ? 10 : 20;
如上例所示,当表达式“x < y”的运算结果返回true时,则变量num取值10,当表达式“x < y”返回false时,则变量num取值20。上例的结果为num等于10。
例 使用三元运算符求两数中的最大数。
public class ComputeMax {
public static void main(String[] args) {
int x=32; // 声明变量x
int y=23; // 声明变量y
int max=x>y?x:y; // 声明变量max并赋值x与y的最大数
System.out.println("x=" x); //输出x的值
System.out.println("y=" y); //输出y的值
System.out.println("x、y两数中最大的值为:" max);
}
}
运行结果如图1所示。
图1 实例运行结果
运算符优先级
Java中的表达式就是使用运算符连接起来的符合Java规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到低的顺序依次是:
l 增量和减量运算
l 算术运算
l 比较运算
l 逻辑运算
l 赋值运算
如果两个运算有相同的优先级,那么在左边的表达式要比在右边的表达式先被处理。表1显示了在Java里众多运算符的特定的优先级。
表1 运算符的优先级别