首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java逐位Nor

Java逐位Nor
EN

Stack Overflow用户
提问于 2012-03-12 06:41:20
回答 3查看 3.4K关注 0票数 1

我必须做Boolean操作,比如,

代码语言:javascript
复制
 B1=00 10 11 01 00 
 B2=00 10 11 01  
 B1 NOR B2 =11 11 11 11

在Java中这是怎么可能的呢?有人能帮上忙吗?

对不起,我忘了提一下,在Java语言中,是否有可能总是从左边开始执行这种位智能NOR操作而不进行移位(B2的位数更少)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-12 06:45:46

如果b1b2是您的(整型)变量,则表达式为:

代码语言:javascript
复制
~(b1 | b2)

有关更多信息,请参阅Bitwise and Bit Shift Operators

但是,在您的示例中,变量具有不同的长度。结果既不对应a也不对应a。

更新:如果您有两个布尔值序列,大小不相等,并且只需要其中的一部分(从左到右),我建议使用BitSet

代码语言:javascript
复制
BitSet b1 = new BitSet();
// Fill it with booleans:
for ( int i = 0 ; i < myBooleans.length ; i++ )
    b1.set(i, myBooleans[i]);
// Or fill it with bytes:
BitSet b1 = BitSet.valueOf(myBytes);
// Or fill it with 0/1 from a string:
for ( int i = 0 ; i < myString.length() ; i++ )
    b1.set(i, myString.charAt(i) == "1");

BitSet b2 = new BitSet();
// Same as above

BitSet result = new BitSet();
result.or(b1); // Copies b1
result.or(b2); // Makes the OR
result.flip(0,result.size()); // Negates - the result is a NOR
result.clear(Math.min(b1.size(), b2.size()), result.size()); // Only retain the common size

如果你真的想使用int,那么最好从右到左表示它(即第一位是b % 2,第二位是b / 2 % 2,依此类推。然后你只需按照开头的解释做NOR运算,并在必要时截断结果。

如果它们从左到右表示,我相信移位是必要的(或者是乘法/除法,本质上是一样的,但更昂贵……),除非它们用0填充(例如:B1=0010 1101 0000 0000 0000 0000 0000 0000B2=0010 1101 0000 0000 0000 0000 0000 0000)。在这种情况下,您可以正常执行操作。

票数 3
EN

Stack Overflow用户

发布于 2012-03-12 06:44:20

也不只是“非或”,所以只需按位或和反转即可。

B1 nor B2 = ~(B1|B2);

不过,您的示例对我来说没有任何意义。为什么是(2'b11 NOR 2'b11) = 2'b11?

票数 3
EN

Stack Overflow用户

发布于 2012-03-12 07:06:20

将b1与B2进行异或运算,然后“不”得到结果:

代码语言:javascript
复制
B1 xnor B2 = ~(B1^B2)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9659622

复制
相关文章

相似问题

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