相关疑难解决方法(0)

按位运算的实际应用

  1. 你有什么用bitwise操作?
  2. 他们为什么这么方便?
  3. 有人可以推荐一个非常简单的教程吗?

c# bitwise-operators

73
推荐指数
4
解决办法
3万
查看次数

这是如何运作的?河内解决方案奇怪的塔

当我发现河内塔楼的这种不同寻常的迭代解决方案时,我迷失在互联网上:

for (int x = 1; x < (1 << nDisks); x++)
{
     FromPole = (x & x-1) % 3;
     ToPole = ((x | x-1) + 1) % 3;
     moveDisk(FromPole, ToPole);
}
Run Code Online (Sandbox Code Playgroud)

这篇文章在其中一个答案中也有类似的Delphi代码.

然而,对于我的生活,我似乎无法找到一个很好的解释为什么这个工作.

任何人都可以帮我理解吗?

language-agnostic algorithm bit-manipulation towers-of-hanoi

50
推荐指数
2
解决办法
7260
查看次数

为什么我们需要在java中使用移位运算符?

  1. 使用Shift运算符而不是使用除法和乘法的目的是什么?

  2. 使用移位运营商还有其他好处吗?

  3. 应该在哪里尝试使用移位运算符?

java bit-shift

14
推荐指数
2
解决办法
9572
查看次数

按位运算符在C中的应用及其效率?

我是bitwise运算符的新手.

我理解逻辑函数如何工作以获得最终结果.例如,当你按位AND两个数字,最后的结果将是在AND这两个数值(1 & 0 = 0; 1 & 1 = 1; 0 & 0 = 0).与OR,相同XOR,和NOT.

我不明白的是他们的应用.我试着到处寻找,其中大多数只是解释按位操作是如何工作的.在所有按位运算符中,我只理解移位运算符的应用(乘法和除法).我也遇到了掩蔽.我知道屏蔽是按位进行的,AND但究竟是什么目的以及我在何处以及如何使用它?

你能详细说明我如何使用遮蔽吗?对于有类似用途ORXOR

c bitwise-operators masking

9
推荐指数
2
解决办法
1万
查看次数

为什么按位运算符比乘法/除法/模数慢?

众所周知,乘法,整数除法和2的幂的模可以作为按位运算更有效地重写:

>>> x = randint(50000, 100000)
>>> x << 2 == x * 4
True
>>> x >> 2 == x // 4
True
>>> x & 3 == x % 4
True
Run Code Online (Sandbox Code Playgroud)

在诸如C/C++和Java等编译语言中,测试表明按位运算通常比算术运算更快.(见这里这里).但是,当我在Python中测试这些时,我得到了相反的结果:

In [1]: from random import randint
   ...: nums = [randint(0, 1000000) for _ in range(100000)]

In [2]: %timeit [i * 8 for i in nums]
7.73 ms ± 397 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) …
Run Code Online (Sandbox Code Playgroud)

python optimization bitwise-operators micro-optimization

9
推荐指数
1
解决办法
598
查看次数

有什么好方法可以利用按位运算符?

我不断地遇到使用按位运算符的人来做快速,简单和优雅的事情.我想学习一些有用的技巧.什么是一些最有用的按位运算符案例?

bit-manipulation

7
推荐指数
2
解决办法
1663
查看次数

按位运算仍然可行吗?

维基百科,一个真正的知识来源,指出:

在大多数较旧的微处理器上,按位运算比加法和减法运算稍快,并且通常比乘法和除法运算快得多.在现代体系结构中,情况并非如此:按位运算通常与添加速度相同(尽管仍然比乘法更快).

是否有一个实际的理由来学习按位操作黑客,或者现在只是你学习理论和好奇心的东西?

c bit-manipulation bitwise-operators

6
推荐指数
3
解决办法
3324
查看次数

为什么要使用按位运算符?

所以我目前正在通过《SAMS 每天 1 小时自学 C++》一书学习 C++。到目前为止,一切都很棒——我已经理解了所说的一切,并且我已经成功地在简单的程序中使用它们来练习它们。

然而,我刚刚读到有关按位运算符的部分,我完全被难住了。我知道你有 &、~、|、<<、>> 等,并且我知道每个数字对二进制形式的数字执行不同的操作,因为 ~ 翻转数字。

我遇到的问题是我无法理解你想要如何以及为什么使用它们。我可以采用一个 int,将二进制数字翻转并得到另一个数字,但这对我的形状或形式到底有什么帮助呢?我希望能解释一下为什么你会使用每一个,如果可能的话,也许可以举个例子?

感谢大家!

c++

6
推荐指数
1
解决办法
747
查看次数

仅响应第一个WM_KEYDOWN通知?

Win32应用程序如何只响应第一个WM_KEYDOWN通知?MSDN文档声明位30"指定先前的密钥状态.如果密钥在发送消息之前关闭,则值为1,如果密钥已启动则为零." 但在我的WndProc中,第30位始终为0.

case WM_KEYDOWN:
    // ToDo - stop multiple notifications for repeating keys
    printf("WM_KEYDOWN %i %i", wParam, lParam & 30);
    return 0;
Run Code Online (Sandbox Code Playgroud)

请问lParam&30是错误的方式吗?我做错了什么吗?

c windows winapi notifications

4
推荐指数
1
解决办法
4772
查看次数

现实生活中的XOR情况?

我试图解释与OR逻辑相比的XOR逻辑.

或者例子很多,例如"我需要在里面或使用雨伞保持干燥",但XOR示例更难.

boolean-logic

1
推荐指数
3
解决办法
9466
查看次数