首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java位运算符

java位运算符
EN

Stack Overflow用户
提问于 2012-08-10 19:29:54
回答 4查看 200关注 0票数 3

我在java中偶然发现了这段代码,如果有人能给我解释一下逻辑,我会很高兴的。

代码语言:javascript
运行
复制
public boolean name(int n) {
   return ((n >> n) & 1L) > 0; 
}

我猜这是一种检查操作,但是这段代码将返回什么布尔值。有没有替代这段代码的方法。我正在尽我最大的努力去理解java中的位操作。

EN

回答 4

Stack Overflow用户

发布于 2012-08-10 19:36:41

这是一段奇怪的代码。它检查已右移位n % 32比特的数字n是否为奇数。

通过的第一个非负值是37 (二进制为100101)、70 (二进制为1000110)和101 (二进制为1100101)。

我怀疑它是否真的像最初的编码器想要的那样工作--它显然没有表示任何有用的东西(而且name的方法名非常无用……)

票数 7
EN

Stack Overflow用户

发布于 2012-08-10 19:56:30

也许这个难题的重点是看看您是否会考虑将0位转换为31位,以及会发生什么。

对于负数,它变得更加奇怪。

代码语言:javascript
运行
复制
for(int n=-70;n<=200;n++)
    if (((n >> n) & 1L) > 0)
        System.out.print(n + " ");

打印

-70 -69 -68 -67 -66 -65 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 37 70 101 102 135 165 167 198 199

nint时,一个类似的公式

代码语言:javascript
运行
复制
n & (1 << (n & 31)) != 0

如果nlong

代码语言:javascript
运行
复制
n & (1L << (n & 63)) != 0

更多的负数在移位后有一个1集,因为它们得到了符号扩展。

一个类似的拼图

http://vanillajava.blogspot.co.uk/2012/01/another-shifty-challenge.html

http://vanillajava.blogspot.co.uk/2012/01/shifting-challenge.html

票数 1
EN

Stack Overflow用户

发布于 2012-08-10 20:10:50

对于正数,似乎该函数返回true当且仅当一个数字的形式为:

代码语言:javascript
运行
复制
sum_k (alpha_k * 2^k + d(k)), where 

alpha_k = 0 or 1
k >= 5
d(k) = k for exactly one of the k where alpha_k = 1 and 0 otherwise

示例:

代码语言:javascript
运行
复制
alpha_k = 1 for k = 5, 0 otherwise => 32 + 5 = 37
alpha_k = 1 for k = 6, 0 otherwise => 64 + 6 = 70
alpha_k = 1 for k = 5 and 6, 0 otherwise => 32 + 5 + 64 = 101
                                         or 32 + 64 + 6 = 102

等。

所有这些数字都会起作用:

将该数字自身移位% 32,对于不为空的k,将其移位d(k)。

到达位置1的位位于定义为1的位置k (alpha_k = 1)

证明只有这些数字才有效是更具挑战性的……

下一个问题显然是:重点是什么?!

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

https://stackoverflow.com/questions/11900746

复制
相关文章

相似问题

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