相关疑难解决方法(0)

2454
推荐指数
25
解决办法
111万
查看次数

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

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

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

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

java bit-shift

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

除了快速数学之外,有没有什么好理由使用位移?

我理解按位操作以及它们如何用于不同目的,例如权限.但是,我似乎不明白比特移位运算符的用途.我理解他们是如何工作的,但我想不出任何我可能想要使用它们的场景,除非我想做一些非常快速的乘法或除法.有没有其他理由使用位移?

bit-manipulation bit-shift

9
推荐指数
3
解决办法
4645
查看次数

位移位的实际应用

我完全理解如何移位。我已经在纸上和代码中完成了许多示例,并且不需要任何帮助。

我正在尝试提出一些有关如何使用位移的真实示例。以下是我能想到的一些例子:

  • 也许我能概念化的最重要的例子与字节序有关。在大端系统中,最低有效位从左侧存储,而在小端系统中,最低有效位从右侧存储。我想对于使用相反字节序策略的系统之间的文件和网络传输,必须进行某些转换。

  • 在处理任何 n^2、n^4 等乘法时,编译器和处理器似乎可以进行某些优化。这些位只是向左移动。(相反,我想同样适用于除法、n/2、n/4 等)

  • 在加密算法中。即使用一系列位移、反转和组合来混淆某些东西。

所有这些都是准确的例子吗?你有什么要补充的吗?我花了很多时间学习如何实现位移/重新排序/字节交换,我想知道如何实际应用它 = )

c bits bit-shift

5
推荐指数
1
解决办法
1768
查看次数

算术右移位有哪些实际用例?

我偶然发现了一个问题,询问是否曾经不得不在实际项目中使用位移.我在许多项目中都使用了相当广泛的位移,但是,我从来不必使用算术位移,即位移​​,其中左操作数可能是负的,符号位应该移位而不是零.例如,在Java中,您将使用运算>>符进行算术位移(同时>>>执行逻辑移位).在经过深思熟虑之后,我得出的结论是,我从未使用>>过可能为负的左操作数.

正如本回答中所述,算术移位甚至是在C++中定义的实现,因此与Java相比 - 在C++中甚至没有用于执行算术移位的标准化运算符.答案还说明了一个有趣的问题,我甚至都没有意识到负面数字的变化:

+63 >> 1 = +31 (integral part of quotient E1/2E2)
00111111 >> 1 = 00011111
-63 >> 1 = -32 
11000001 >> 1 = 11100000
Run Code Online (Sandbox Code Playgroud)

因此,当看到这些位时,-63>>1收益率-32是显而易见的,但也许不是大多数程序员一见钟情的预期.更令人惊讶的是(但在查看位时再次显而易见)-1>>1-1,不是0.

那么,可能负值算术右移的具体用例是什么?

c c++ java bit-manipulation bit-shift

5
推荐指数
2
解决办法
1088
查看次数

标签 统计

bit-shift ×4

bit-manipulation ×3

c ×3

c++ ×2

java ×2

bits ×1

bitwise-operators ×1