本文已收录于专栏 🌸《Java入门一百例》🌸
学习指引
- 序、专栏前言
- 一、位或运算
- 二、位运算的运用
- 1.某位变1
- 2.低位连续0变1
- 三、推荐专栏
- 四、课后习题
序、专栏前言
本专栏开启,目的在于帮助大家更好的掌握学习Java
,特别是一些Java学习者
难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
一、位或运算
位或运算符是
|
,和上节课学习的&
运算一样,它也是一个二元运算符,表示为x | y
。
|
运算同样是对二进制进行运算,二进制只有0
和1
,所以可能出现的组合的情况只有种,我们同样将其写成表格形式
x | y | 结果 |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
- 我们仔细对比表格可以很明显发现规律
只要当
x
或y
有一者为1
,则答案为1
,也可理解无论1
还是0
,位或上1
均为1
。只有当两个操作数都是
0
的时候,答案才为0
。可以与
&
运算进行对比,&
运算只有两操作数均为1
时才为1
。
public class Main{
public static void main(String[] args) {
int a=0b10101;
int b=0b01010;
System.out.println(a|b);
}
}
在
Java
中,以0b
开头,表示这是一个二进制串,a
的实际值为,
b
的值为此时
|
运算,会对a
和b
的每一位进行运算,b
的前导0
可去掉,这里是为了形成对照最终根据规则课得到
,转换为十进制的结果为
31
。
二、位运算的运用
1.某位变1
给定一个正整数 ,判断它二进制低位的第
位是否为
0
,如果是则让它变1
,输出改变后的值。
- 问题的思路很简单,就是直接把地位的第
5
位变为1
,这样我们很容易联想到|
,因为任何数|
上1
均得到1
,通过这个操作我们可以让某个数的任何一位变为1
。
import java.util.Scanner;
public class TextEditor {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
System.out.println(x|(0b10000));
}
}
2.低位连续0变1
给定一个正整数,将它低位连续的
0
都变为1
。
假设给定的整数低位有连续个
0
,二进制表示如下:
很容易联想到,如果我们将其减去1
,得到的数为
这时又能发现,如果对两个数进行|
运算,就能得到
这样即可达到题目要求
import java.util.Scanner;
public class TextEditor {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
System.out.println(x|(x-1));
}
}
三、推荐专栏
🌌《零基础学算法100天》🌌
四、课后习题
序号 | 题目链接 | 难度评级 |
1 | 按位与结果大于0的最长组合 | 2 |
👇 学习有疑问?👇