Java中的运算符
算数运算符
| 加 | 减 | 乘 | 除 | 取余 | 加加 | 减减 |
|---|---|---|---|---|---|---|
| + | - | * | / | % | ++ | – |
++/–说明:
当++或--单独使用时,如:用在for循环中++a,a++效果一样,当遇到赋值运算时就不一样了如下:
int a = 10;
int b = a++; // 先赋值再加一(这里的b等于10)
int c = ++a; // 先加一再赋值(这里的c等于11)
比较运算符
| 大于 | 小于 | 等于 | 不等于 |
|---|---|---|---|
| > | < | == | != |
比较运算符的结果都是boolean类型(true 或 false)
赋值运算符
int a = 10;
a += 1; // 同a = a + 1;
逻辑运算符
| and | or | 备注 |
|---|---|---|
| && | || |
位运算符
| 运算符 | 解释 |
|---|---|
| & | 位与,有0则0 |
| | | 位或,有1则1 |
| ^ | 位异或,相同则0,不同则1 |
| ~ | 取反 |
| >> | 向右移,最高位是0,则左边补齐0,最高位是1,则左边补齐1 |
| >>> | 无符号右移,无论最高位是0还是1,左边补齐0 |
| << | 向左移,左边最高位丢弃,右边补齐0 |
/*
位运算符,主要操作二进制
位与,有0则0
| 位或,有1则1
^ 位异或,相同则0,不同则1
~ 取反
>> 向右移,最高位是0,则左边补齐0,最高位是1,则左边补齐1
>>> 无符号右移,无论最高位是0还是1,左边补齐0
<< 向左移,左边最高位丢弃,右边补齐0
*/
class Operator08 {
public static void main(String[] args) {
System.out.println(6 & 3); //2
System.out.println(6 | 3); //7
System.out.println(6 ^ 3); //5
System.out.println(~6); //-7
/*
110
& 011
----------
010 就是十进制里面的2
110
| 011
----------
111 就是十进制里面的7
110
^ 011
----------
101 就是十进制里面的5
00000000 00000000 00000000 00000110 正数6的反码,补码,原码都是其本身
11111111 11111111 11111111 11111001 对6取反,这里就得到了-7的补码
00000000 00000000 00000000 00000001 减1
----------------------------------------
11111111 11111111 11111111 11111000 得到反码
10000000 00000000 00000000 00000111 得到了-7
*/
System.out.println(12 >> 1); //12/2=6
System.out.println(12 >> 2); //12/4=3
System.out.println(12 >> 3); //12/8 =1 向右移n位,则除以2的n次方
System.out.println(12 << 1); //12*2=24
System.out.println(12 << 2); //12*4=48
System.out.println(12 << 3); //12*8=96 向左移n位,则乘以2的n次方
//^的特点:一个数据对另一个数据位异或2次,则这个数据本身不变
System.out.println(12 ^ 5 ^ 12);
/*
1、请实现两个整数变量的交换(不能使用第三方变量)
2、最有效率的算出2 * 8的结果
*/
// 方法一
/*
int a = 8;
int b = 6;
a = a + b;//a=14 b=6
b = a - b;//b=8
a = a - b;//14-8=6
有缺点,如果a+b超出了int类型的取值范围,则有可能损失精度
*/
//方法二
int a = 8;
int b = 6;
a = a ^ b;
b = a ^ b;//a ^ b ^ b,b=a
a = a ^ b;//a ^ b ^ a, a=b
System.out.println(2 << 3);//2 * (2*2*2)
}
}

浙公网安备 33010602011771号