栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中常用的位运算符及其应用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中常用的位运算符及其应用

1.位运算就是直接对整数在内存中的二进制位进行操作,针对与int类型进行操作

Java中常用的位运算符有以下7种:

    &     |       ^  ~  <<       >>       >>>
按位与按位或按位异或取反左移带符号右移无符号右移
2.运算方法

按位与运算(双目运算符):

对应的两个二进制位均为1时取1,否则取0

二进制数
30011
50101
3&50001

结果:3&5=1 ( 0011 & 0101 = 0001 )

按位或运算(双目运算符):

对应的两个二进制位均为0时取0,否则取1

二进制数
30011
50101
3|50111

结果:3|5=7 ( 0011 | 0101 = 0111 )

按位异或运算(双目运算符):

对应的两个二进制位相同时取0,相异时取1

二进制数
30011
50101
3^50110

结果:3^5=6 ( 0011 ^ 0101 = 0110 )

取反运算(单目运算符):

对应的每个二进制位取反,0变1,1变0

二进制数
30011
~31100


左移运算(双目运算符):

左移n位就是乘以2的n次方

例:0001<<3  :3是左移的位数

即: 0001 ——>1000  左移3位


带符号右移运算(双目运算符):

右移n位就是除以2的n次方

例:0100>>2  :2是右移的位数

即: 0100——>0001   右移2位

注:如果是正数,二进制串右移的时候用0来填充左边的空位;

       如果是负数,右移的时候用1来填充左边的空位

例:3>>2

右移前:0100

右移后:00 0100

-3>>2

右移前:1100

右移后:11 1100

无符号右移运算(双目运算符):

无符号右移在二进制串移动之后,空位由0来补充,与符号位是0是1毫无关系

例:3>>2

右移前:0100

右移后:00 0100

-3>>2

右移前:1100

右移后:00 1100


3.运算符的优先级

优先级运算符结合性
1()【】由左至右
2!、+(正号)、-(负号)、++、 --(递增与递减运算符)、~(位逻辑运算符)由右至左
3*、/、%(算术运算符)由左至右
4+、-(算术运算符)由左至右
5<<、>>(左位移、右位移运算符)由左至右
6>、>=、<、<= (关系运算符)由左至右
7==、!= (关系运算符)由左至右
8&(位运算符AND)(位逻辑运算符)由左至右
9^(位运算符XOR)(位逻辑运算符)由左至右
10|(位运算符OR)(位逻辑运算符)由左至右
11&&(逻辑运算符)由左至右
12||(逻辑运算符)由左至右
13?:(条件)由右至左
14=(赋值)由右至左
4.应用

举例:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。如:

示例一
输入: s = "abcad"输出: false 
示例二
输入: s = "abc"输出: true

分析:从a到z有26个字符,int类型有32位,使用一个int类型的变量(下文用k表示)来代替长度为26的bool数组。假设这个变量占26个bit(在多数语言中,这个值一般不止26),那么我们可以把它看成000...00(26个0),这26个bit对应着26个字符。

int k = 0;

比如,字符c,检查对应下标的bit值即可判断是否重复,首先计算出字符'c'离'a'这个字符的距离,即我们要位移的距离,用m表示,

int m=s.charAt(i)-'a';

那么使用左移运算符1 << m则可以得到对应下标为1,其余下标为0的数,得到的数为000...00100。

1< 

完整代码:

public class test {
    public static void main(String [] args){
        String str = "abc";
        test a = new test();                          
        a.isUnique(str);                             
        System.out.println(a.isUnique(str));        
    }
    
    public boolean isUnique(String s){
        int k=0;
       for(int i=0;i 

输出结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号