算法之美 | 位运算的巧妙奥秘(二) | JAVA中位运算的实际应用
作者:互联网
文章目录
前言
传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基础的方法,然而结果是超时,在优化的过程中,发现了位运算的一些巧妙奥秘,谨以此篇文章记载。
一、位运算
关于位运算的符号以及他的一些规则还是有必要去记录一下的(详细记录请见):
名称 | 符号 |
---|---|
按位或 | 丨 |
按位与 | & |
按位非 | ~ |
按位异或 | ^ |
左移 | << |
右移 | >> |
二、位运算的奇思妙用
熟悉以下各种位运算的扩展使用,可能会在你做题的过程中达到意向不到的妙用哦
1.将大写字母转换成为小写字母
public class Main {
public static void main(String[] args) {
char a='B';
a= (char) (a|' ');
System.out.println(a);
}
}
自己的不官方理解:
运行结果:
b
暂时没有理解,下次一定。
2.位运算表示乘除法
public class Main {
public static void main(String[] args) {
int a=10;
//向右 移位 1表示 除以 2
a>>=1;
System.out.println("10向右位移 1表示10/2:"+a);
//向左位移 1表示乘2
a=10;
a<<=1;
System.out.println("10向左位移1表示10*2:"+a);
}
}
不官方理解:
运行结果:
10向右位移 1表示10/2:5
10向左位移1表示10*2:20
优点:运算速度会比乘除快。
理解:暂时只会用
3.位运算判断奇偶性
public class Main {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9,0};
for (int i = 0; i < 10; i++) {
if((arr[i]& 1)==0){
System.out.println(arr[i]+"是偶数");
}else{
System.out.println(arr[i]+"是奇数");
}
}
}
}
不官方理解:
运行结果:
1是奇数
2是偶数
3是奇数
4是偶数
5是奇数
6是偶数
7是奇数
8是偶数
9是奇数
0是偶数
4.利用异或交换两数
public class Main {
public static void main(String[] args) {
//不使用介质交换两数
int a=5,b=4;
a^=b;
b^=a;
a^=b;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
不官方理解:
运行结果:
a=4
b=5
理解: 暂时没有
5.正负号交换
public class Main {
public static void main(String[] args) {
int a=3;
a=~a+1;
System.out.println(a);
}
}
不官方理解:
运行结果:
-3
理解: 暂时没有。
标签:10,JAVA,运算,中位,System,println,public,out 来源: https://blog.csdn.net/shanzhuooo/article/details/122116337