我只是想知道为什么我们通常||在两个布尔值之间使用逻辑OR 而不是按位OR |,尽管它们都运行良好.
我的意思是,看看以下内容:
if(true | true) // pass
if(true | false) // pass
if(false | true) // pass
if(false | false) // no pass
Run Code Online (Sandbox Code Playgroud)
if(true || true) // pass
if(true || false) // pass
if(false || true) // pass
if(false || false) // no pass
Run Code Online (Sandbox Code Playgroud)
我们可以用|而不是||吗?同样的事情&和&&.
在浏览Guava的源代码时,我遇到了以下一段代码(hashCode内部类的实现的一部分CartesianSet):
int adjust = size() - 1;
for (int i = 0; i < axes.size(); i++) {
adjust *= 31;
adjust = ~~adjust;
// in GWT, we have to deal with integer overflow carefully
}
int hash = 1;
for (Set<E> axis : axes) {
hash = 31 * hash + (size() / axis.size() * axis.hashCode());
hash = ~~hash;
}
hash += adjust;
return ~~hash;
Run Code Online (Sandbox Code Playgroud)
两者的adjust和hash是int秒.从我所知道的关于Java,~意味着位求反,所以adjust = …
为什么~2等于-3?~操作员如何工作?
我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.
我一直认为&&Java 中的运算符用于验证它的布尔操作数是否都是true,并且&运算符用于对两个整数类型执行逐位运算.
最近我开始知道&运算符也可以用来验证它的布尔操作数是否都是true,唯一的区别是它检查RHS操作数,即使LHS操作数是假的.
&Java内部的运算符是否内部过载?或者这背后有其他一些概念吗?
由于其简洁性,我个人喜欢在布尔检查的上下文中有意义的,或者,^运算符.我更喜欢写作
if (boolean1 ^ boolean2)
{
//do it
}
Run Code Online (Sandbox Code Playgroud)
比
if((boolean1 && !boolean2) || (boolean2 && !boolean1))
{
//do it
}
Run Code Online (Sandbox Code Playgroud)
但是我常常从其他有经验的Java开发人员(不仅仅是新手)那里得到一些困惑,有时会评论它应该如何仅用于按位操作.
我很好奇关于^运营商使用的最佳实践.
所以这更像是一个理论问题.C++和直接基于它的语言(in)(Java,C#,PHP)具有快捷运算符,用于将大多数二元运算符的结果赋值给第一个操作数,例如
a += 3; // for a = a + 3
a *= 3; // for a = a * 3;
a <<= 3; // for a = a << 3;
Run Code Online (Sandbox Code Playgroud)
但是当我想切换一个布尔表达式时,我总会发现自己写的东西就像
a = !a;
Run Code Online (Sandbox Code Playgroud)
这a是一个很长的表达式,这会很烦人.
this.dataSource.trackedObject.currentValue.booleanFlag =
!this.dataSource.trackedObject.currentValue.booleanFlag;
Run Code Online (Sandbox Code Playgroud)
(是的,德米特定律,我知道).
所以我想知道,是否有任何语言都使用一元布尔切换运算符,这将允许我缩写a = !a而不重复表达式a,例如
!=a;
// or
a!!;
Run Code Online (Sandbox Code Playgroud)
让我们假设我们的语言有一个适当的布尔类型(比如bool在C++中)并且a属于那种类型(所以没有C风格int a = TRUE).
如果你能找到一个文档化的源代码,我也有兴趣了解一下,例如C++设计者是否考虑在bool成为内置类型时添加类似的运算符,如果是这样,为什么他们决定反对它.
(注意:我知道有些人认为作业不应该使用
=,++并且+=不是有用的操作员,而是设计缺陷;让我们假设我对他们感到高兴,并专注于为什么他们不会扩展到bool).
我正在尝试使用Python中的bin()函数将整数转换为二进制.但是,它总是删除我实际需要的前导零,这样结果总是8位:
例:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
java ×4
c ×2
operators ×2
binary ×1
bitmask ×1
boolean ×1
c++ ×1
complement ×1
conditional ×1
formatting ×1
gwt ×1
negation ×1
python ×1
terminology ×1
xor ×1