首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><<和|=在Java中的意义

<<和|=在Java中的意义
EN

Stack Overflow用户
提问于 2014-03-03 01:06:10
回答 2查看 895关注 0票数 1

在Java中实现代码存在一个问题,在Java中,我必须找到字符串是否具有唯一字符,而不必创建新的数据结构。

Java实现如下:

代码语言:javascript
复制
public static boolean isUniqueChars(String str) { 
    int checker = 0; 
    for (int i = 0; i < str.length(); ++i) { 
        int val = str.charAt(i) - 'a'; 
        if ((checker & (1 << val)) > 0) return false; 
        checker |= (1 << val); 
    } 
    return true; 
}

在第5-6行中,有一个我并不真正理解的<<。而在第6行中,我不知道这个符号是干什么的。

有人能简单解释一下这段代码是如何工作的吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 01:12:16

1.这个符号: <<

在您的代码中:1 << val表示(int)Math.pow(2,val) = 2 ^ val

2.这个符号: >>

代码语言:javascript
复制
  >> is  bit-shift operator

x >> N的意思是(如果您将它视为二进制数字的字符串):

最右边的N位被丢弃

将最左边的位复制一次,以便将结果复制到原来的大小(32或64位),例如()。

代码语言:javascript
复制
00000000000000000000000000101011 >> 2 -> 00000000000000000000000000001010

11111111111111111111111111010100 >> 2 -> 11111111111111111111111111110101

3.这个符号: |=

它意味着按位包含或赋值运算符。

,例如:

代码语言:javascript
复制
            checker |= (1<<val) 
is same as  checker |= (2^val)  
is same as  checker = checker | (2^val)    (*)

然后:A | B ( | means Binary OR Operator copies a bit if it exists in either operand)

示例

代码语言:javascript
复制
   A      = 00101010
   B      = 01101000
 A | B    = 01101010 

使用

代码语言:javascript
复制
    0 OR 0 = 0  , 1 OR 0 = 1
    1 OR 1 = 1  , 0 OR 1 = 1
票数 4
EN

Stack Overflow用户

发布于 2014-03-03 01:23:47

使用Ziprox的有用提示(1 << val)等于2^val或Math.pow(2,val)。要破译正在发生的事情就容易多了。

我相信'int‘是4个字节长,也就是32位。此方法是将字母表(小写)中的每个字母转换为数字2^ val。基本上,每个字母都由变量检查器的唯一位表示。26个字母,32位,给你6个额外的比特,什么也不做。

代码语言:javascript
复制
checker & (1<<val)

只会是对它以前见过的数字。

代码语言:javascript
复制
checker |= (1<<val)

等于

代码语言:javascript
复制
checker = (checker | (1<<val))

它简单地将字母的位从0翻转到1,表示它已经被看到了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22135980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档