![]() |
1
8
你是对的,如果移位运算符只作为乘法的替代,它应该留给编译器。 我想你忽略了这样的应用程序:
|
![]() |
2
22
第一个原因: 有时-大多数时候-你想把一个整数当作 数 . 有时,尽管整数是表示一组位的方便方法。 乘法是对数字的运算。 移位是对一组位的操作。 乘法的结果和移位的结果之间恰好存在某种关系,这一点并不是特别相关。操作是 与众不同。 第二个原因: C#和Java都是为C开发人员所熟悉而设计的,尽管只是肤浅的层次。因此,C语言中常见的习语都包含在C语言和Java语言中。 |
![]() |
3
12
再问一个问题:
我没有考虑整数等等 完全合乎逻辑
这在字节很重要的一系列领域中很常见(例如图形编程、序列化等)。
微妙之处
不要
希望它的行为像一个整数,特别是在处理边缘时。。。当你在地图上左移一点或右移一点时会发生什么的规则
进入之内
地图(-ve vs+ve等)很好理解,但很关键。同样地
|
![]() |
4
1
你要问的不是为什么C/Java中有位移位操作符,而是为什么
对此的下意识反应是乘法和除法的语义不同于位移位,因此它不能100%地映射以替换运算。 此外,您还忘记了在JIT(HotSpot)中发生的额外编译步骤,在JIT中发生了各种额外的优化。坦率地说,不需要优化这个特定的步骤,而C语言是编译器生成代码的地方。 |
![]() |
5
0
它们是否等同于其他操作,编译器是否足够聪明以高效地实现这些操作,其实并不重要。如果这就是我们要去的地方,那么你只需要一个宏汇编程序和一个非常好的链接时间优化器,也许在一个带有垃圾收集器的虚拟机上。这些不是语言设计师通常追求的目标。 |
![]() |
6
0
例如,您的程序可能会使用位掩码之类的内容。在这种情况下,位移位操作是必要的。或者,如果您只是在解决一些奇怪的任务,需要以指定的方式对状态进行编码。 tutorial -大多数样本来自数学问题。如果你只是在做一个网站或一个GUI应用程序,你可能不需要改变,但有时你真的需要。。。 |
![]() |
7
0
除了这里的其他原因之外,在很多情况下,您可能需要转换(或其他位操作)以通过网络与第三方库或远程应用程序接口。 |
![]() |
8
0
|