ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法之美 | 位运算的巧妙奥秘(二) | JAVA中位运算的实际应用

2021-12-23 21:59:54  阅读:173  来源: 互联网

标签:10 JAVA 运算 中位 System println public out


文章目录


前言

传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数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/25
10向左位移1表示10*220

优点:运算速度会比乘除快。

理解:暂时只会用

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有