我是来自cpp源的给定条件.
if (!(faces & activeFace) || [...]) { ... }
Run Code Online (Sandbox Code Playgroud)
我想把它翻译成C#.
当我理解这一点时,这意味着if activeFace is *not* in faces then...- 不是吗?
那么C#中的等价物是什么?
注意:我不能使用faces.HasFlag(activeFace)
那应该是
if ((faces & activeFace) == 0 || [...]) { ... }
Run Code Online (Sandbox Code Playgroud)
我对吗?
为了完整性,这里是实际的标志枚举
[Flags]
enum Face {
North = 1,
East = 2,
South = 4,
West = 8,
Top = 16,
Bottom = 32
};
Run Code Online (Sandbox Code Playgroud)
那么它在cpp中是一样的,你只需要[Flags]在C#中添加一个属性
最常见的是,模运算符%用于测试偶数或奇数.
现在的问题是,有没有使用按位对奇数任何问题的测试和,因为它感觉更自然的测试最右边的位是1或0不是做对一个模校验2
并且因为32位转换不会改变最右边的位.
都
(1 + Math.pow(2,52)) & 1 //1
和
(1 + Math.pow(2,52)) % 2 //1
产生相同的结果.
是否有理由更喜欢模运算符而不是按位?
编辑:这个问题只考虑了64位精度范围内的值,因为只有偶数可以精确地表示在2 ^ 53以上,因此两个操作数都会失败(9007199254740993 % 2 //0)
我正在阅读一些实现简单解析器的代码。一个名为的函数将scan一行分解为标记。scan有一个静态变量bp,分配给要标记的行。在分配之后,空格被跳过。见下文。我不明白的是为什么代码对bp指向 with的字符进行按位和处理0xff,即, 的目的是* bp & 0xff什么?这怎么样:
while (isspace(* bp & 0xff))
++ bp;
Run Code Online (Sandbox Code Playgroud)
与此不同:
while (isspace(* bp))
++ bp;
Run Code Online (Sandbox Code Playgroud)
这是scan函数:
static enum tokens scan (const char * buf)
/* return token = next input symbol */
{ static const char * bp;
while (isspace(* bp & 0xff))
++ bp;
..
}
Run Code Online (Sandbox Code Playgroud) 我在javascript中使用BitWise AND运算符.
我有两个32位的nunber
4294901760 (11111111 11111111 00000000 00000000) and
4294967040 (11111111 11111111 11111111 00000000)
Run Code Online (Sandbox Code Playgroud)
当我和他们按位时, 4294901760 & 4294967040我得到-65536,但结果应该是4294901760.
任何人都可以指导我,我错过了什么吗?或者做到这一点的正确方法是什么.谢谢
给定两个数字L&R,查找位于L和R之间的所有数字的按位和
制约因素1<= L,R <= (2^32).
LL step = 1;
while(L!=R)
{
L/=2; R/=2; step*=2;
}
cout<<L*step<<endl;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解释上面代码背后的解释或逻辑吗?
我通过java源代码看看尝试学习集合的实现.在ArrayDeque类中发现了一件有趣的事情.
public E pollFirst() {
int h = head;
@SuppressWarnings("unchecked")
E result = (E) elements[h];
// Element is null if deque empty
if (result == null)
return null;
elements[h] = null; // Must null out slot
head = (h + 1) & (elements.length - 1);
return result;
}
public E pollLast() {
int t = (tail - 1) & (elements.length - 1);
@SuppressWarnings("unchecked")
E result = (E) elements[t];
if (result == null)
return null;
elements[t] = null;
tail = t; …Run Code Online (Sandbox Code Playgroud) 性能有任何实际差异吗?它更快吗?(假设我在同一个程序中的至少100个案例中使用它,它会在速度方面改进我的程序吗?)
其中' - '表示负x,'&'表示按位AND.
这些数字在程序中是8位2的补码,我似乎无法找到输入和输出之间的相关性.
8 & (-8) = 8
7 & (-7) = 1
97 & (-97) = 1
Run Code Online (Sandbox Code Playgroud)
所以可能重要的是位操作?
0000 1000 & (1111 1000) = 0000 1000
0000 0111 & (1111 1001) = 0000 0001
0110 0001 & (1001 1111) = 0000 0001
Run Code Online (Sandbox Code Playgroud)
在上述每种情况下,高4位总是最终为0,但我找不到输入之间的相关性以及低4位最终的结果.
有任何想法吗?
解答: 找到最低设置位
bitwise-and ×10
javascript ×2
arraydeque ×1
bit ×1
c ×1
c# ×1
c++ ×1
char ×1
collections ×1
isspace ×1
java ×1
modulo ×1
parity ×1
php ×1