java基础语言 运算符

java

/*

++,--运算符的使用:

单独使用:

放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)

参与运算使用:

放在操作数的前面,先自增或者自减,然后再参与运算。

放在操作数的后面,先参与运算,再自增或者自减。

作用:就是对变量进行自增1或者自减1。

*/

public class Text3 {

public static void main(String[] args) {

//定义两个变量

int x = 3;

int y = 4;

//单独使用

//x++;

//y--;

++x;

--y;

System.out.println("x:"+x+",y:"+y);//x++或者++x,单独使用时,输出的值都是一样,这里为4;y--或者--y,单独使用时,输出的值都是一样,这里为3

System.out.println("-------------------");

//参与运算使用

int a = 3;

int b = 4;

//int c = a++;

//int d = b--;

int e = ++a;

int f = --b;

System.out.println("a:"+a); //4

System.out.println("b:"+b); //3

//System.out.println("c:"+c); //3

//System.out.println("d:"+d); //4

System.out.println("e:"+e); //4

System.out.println("f:"+f); //3

}

}

/*

++,--的练习题

第一题:

int a = 10;

int b = 10;

int c = 10;

a = b++;

c = --a;

b = ++a;

a = c--;

请分别计算出a,b,c的值

第二题:

int x = 4;

int y = (x++)+(++x)+(x*10);

请分别计算出x,y的值

*/

public class Text3 {

public static void main(String[] args) {

int a = 10;

int b = 10;

int c = 10;

a = b++; //a=10,b=11,c=10

c = --a; //a=9,b=11,c=9

b = ++a; //a=10,b=10,c=9

a = c--; //a=9,b=10,c=8

System.out.println("a:"+a); //9

System.out.println("b:"+b); //10

System.out.println("c:"+c); //8

System.out.println("--------------");

int x = 4;

int y = (x++)+(++x)+(x*10);

//4+6+60

//x=5,6

System.out.println("x:"+x); //6

System.out.println("y:"+y); //70

}

}

/*

面试题(可能性大):

short s=1;s = s+1;

short s=1;s+=1;

上面两个代码有没有问题,如果有,那里有问题。

为什么第二个木有问题呢?

扩展的赋值运算符其实隐含了一个强制类型转换。

s += 1;

不是等价于 s = s + 1;

而是等价于 s = (s的数据类型)(s + 1);

*/

public class Text4 {

public static void main(String[] args) {

//short s = 1;

//s = s + 1;

//System.out.println(s); //损失精度,

short s = 1;

s += 1; //好像是 s = s + 1;

System.out.println(s); //2

}

}

/*

位运算符:

&,|,^,~

<<,>>,>>>

注意:

要做位运算,首先要把数据转换为二进制。

*/

public class Text4 {

public static void main(String[] args) {

//&,|,^,~

int a = 3;

int b = 4;

System.out.println(3 & 4); //0

System.out.println(3 | 4); //7

System.out.println(3 ^ 4); //7

System.out.println(~3); //-4

}

}

/*

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11

00000000 00000000 00000000 00000011

4的二进制:100

00000000 00000000 00000000 00000100

&位与运算:有0则0。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

结果是:0

|位或运算:有1则1。

00000000 00000000 00000000 00000011

|00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

^位异或运算:相同则0,不同则1。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

~按位取反运算符:0变1,1变0

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (补码)

补码:11111111 11111111 11111111 11111100

反码:11111111 11111111 11111111 11111011

原码:10000000 00000000 00000000 00000100

结果是:-4

*/

/*

面试题:

请自己实现两个整数变量的交换

注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。

*/

public class Text4 {

public static void main(String[] args) {

int a = 10;

int b = 20;

System.out.println("a:"+a+",b:"+b);

//方式1:使用第三方变量(开发中用的)

/*

int c = a;

a = b;

b = c;

System.out.println("a:"+a+",b:"+b);

System.out.println("------------");

*/

//方式2:用位异或实现(面试用)

//左边:a,b,a

//右边:a ^ b

/*

a = a ^ b;

b = a ^ b; //a ^ b ^ b = a

a = a ^ b; //a ^ b ^ a = b

System.out.println("a:"+a+",b:"+b);

*/

//方式3:用变量相加的做法

/*

a = a + b; //a=30

b = a - b; //b=10

a = a - b; //a=20

System.out.println("a:"+a+",b:"+b);

*/

//方式4:一句话搞定

b = (a+b) - (a=b); //b=30-20=10,a=20

System.out.println("a:"+a+",b:"+b);

}

}

 

/*

<<:左移 左边最高位丢弃,右边补齐0

>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1

>>>:无符号右移 无论最高位是0还是1,左边补齐0

面试题:

请用最有效率的方式写出计算2乘以8的结果?

2 * 8

2 << 3

*/

public class Text {

public static void main(String[] args) {

//<< 把<<左边的数据乘以2的移动次幂

System.out.println(3 << 2); //3*2^2 = 3*4 = 12;

//>> 把>>左边的数据除以2的移动次幂

System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6

System.out.println(24 >>> 2);

System.out.println(-24 >> 2);

System.out.println(-24 >>> 2);

}

}

/*

计算出3的二进制:11

00000000 00000000 00000000 00000011

(00)000000 00000000 00000000 0000001100

>>的移动:

计算出24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

1111111111 11111111 11111111 111010(00) 补码

补码:1111111111 11111111 11111111 111010

反码:1111111111 11111111 11111111 111001

原码:1000000000 00000000 00000000 000110

结果:-6

>>>的移动:

计算出24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

结果:

*/

/*

^的特点:一个数据对另一个数据位异或两次,该数本身不变。

*/

public class Text {

public static void main(String[] args) {

int a = 10;

int b = 20;

System.out.println(a ^ b ^ b); //10

System.out.println(a ^ b ^ a); //20

}

}

/*

练习:

获取两个整数中的最大值

获取三个整数中的最大值

比较两个整数是否相同

*/

public class Text {

public static void main(String[] args) {

//获取两个整数中的最大值

int x = 100;

int y = 200;

int max = (x > y? x: y);

System.out.println("max:"+max);

System.out.println("--------");

//获取三个整数中的最大值

int a = 10;

int b = 30;

int c = 20;

//分两步:

//A:先比较a,b的最大值

//B:拿a,b的最大值在和c进行比较

int temp = ((a > b)? a: b);

//System.out.println(temp);

int max1 = (temp > c? temp: c);

System.out.println("max1:"+max1);

//一步搞定

//int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);

//这种做法不推荐。

//int max2 = a > b?a > c? a: c:b > c? b: c;

//System.out.println("max2:"+max2);

System.out.println("--------");

//比较两个整数是否相同

int m = 100;

int n = 200;

//boolean flag = (m == n)? true: false;

boolean flag = (m == n);

System.out.println(flag); //false

}

}

 

以上是 java基础语言 运算符 的全部内容, 来源链接: utcz.com/z/390328.html

回到顶部