分享

交换两个数例题

 融水公子 2018-07-23
按位取反~ 
按位与&   有假则假 10-->0    00-->0
按位或 |     有真则真10-->1    11-->1
按位异或   异火通灵  11-->0   00-->0

位运算效率最高的

左移<---  右边空出来的位置补0
a<<b

带符号右移
a>>b--->
左边空出来的位置   补齐原来的符号位

无符号右移
a>>>b--->左边空出来的位置补0

最快的速度计算8*4=32
0000 1000  8
0010 0000  32
8<<2=32
System.out.println(8<<2);

技巧:
左乘右除
左移  右移
8<<2=8*2de2次方=32
8>>2=8/2de2次方=2

通过键盘输入连个数,然后显示两个数交换后的数据:
方法一:
int z=x;
x=y;
y=z;
通过第三变量,交换两个数
------------------------------
package zaizhu.da;

import java.util.Scanner;
public class jiaohuan {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个数:");
int x=input.nextInt();
System.out.println("请输入第二个数:");
int y=input.nextInt();
int z=x;
x=y;
y=z;
System.out.println("x="+x+"\ty="+y);
}
}

方法二:公式法
x=(x+y)-(y=x);
------------------------------
package zaizhu.da;

import java.util.Scanner;
public class jiaohuan {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个数:");
int x=input.nextInt();
System.out.println("请输入第二个数:");
int y=input.nextInt();
x=(x+y)-(y=x);
System.out.println("x="+x+"\ty="+y);
}
}
方法三:计算
x=x+y;
y=x-y;
x=x-y;
------------------------------------
package zaizhu.da;

import java.util.Scanner;
public class jiaohuan {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个数:");
int x=input.nextInt();
System.out.println("请输入第二个数:");
int y=input.nextInt();
x=x+y;
y=x-y;
x=x-y;
System.out.println("x="+x+"\ty="+y);
}
}
方法四:
x=x^y;
y=x^y;
x=x^y;
-------------------------------------------------
package zaizhu.da;

import java.util.Scanner;
public class jiaohuan {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个数:");
int x=input.nextInt();
System.out.println("请输入第二个数:");
int y=input.nextInt();
x=x^y;
y=x^y;
x=x^y;
System.out.println("x="+x+"\ty="+y);
}
}

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多