问题标签 [bit-shift]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
741 浏览

bit-shift - 班次算子是如何实现的?

我想知道当我做 4<<2 时,下面到底发生了什么?是否执行任何乘法运算或如何计算值。如果您对移位运算符的实现有参考,请回复我。提前致谢

0 投票
1 回答
111 浏览

vb.net - 如何将 JavaScript 中的 >>> 运算符转换为 VB.NET?

我正在做从 JavaScript 到VB.NET的代码转换。我被 >>> 操作卡住了。

请参阅下面的示例代码和我的尝试:

JavaScript:

我在 VB.NET 中的尝试:

我究竟做错了什么?

0 投票
2 回答
994 浏览

c# - 为什么 F# 位运算符用 1 填充有符号类型?

我在看 F# doc on bitwise ops:

按位右移运算符。结果是第一个操作数的位右移了第二个操作数中的位数。从最低有效位置移出的位不会旋转到最高有效位置。对于无符号类型,最高有效位用零填充。对于有符号类型,最高有效位用 1 填充。第二个参数的类型是 int32。

与 MSB 用零填充的 C++ 语言(可能还有 C)相比,这种设计选择背后的动机是什么?例如:

其中-2147483648 =

掩码等于 1073741824

其中 1073741824 =

现在,如果您在 F#(或 C#)中编写相同的代码,这确实会用一个填充 MSB,您将得到 -1073741824。

其中-1073741824 =

0 投票
8 回答
812 浏览

c# - 为什么 Java 和 C# 有位移运算符?

整数乘法(暂时忘记除法)之间的差异是否仍然有利于移位,如果是,差异有多大?

它似乎只是一个低级别的优化,即使你想要它不应该(C#/Java)到字节码编译器或 jit 在大多数情况下捕获它?

注意:我测试了 C# 的编译输出(使用 gmcs Mono C# 编译器版本 2.6.7.0),即使乘以 2 的倍数,乘法示例也没有使用 shift 进行乘法运算。

C# http://csharp.pastebin.com/hcrRnPrb

cil http://csharp.pastebin.com/0js9F2c1

PS我忘记了在字节上使用它可能会有些用处,但在将它用于数字时仍然遇到一些麻烦。

0 投票
4 回答
5120 浏览

bit-shift - 有符号整数的逻辑右移操作

对有符号整数 -28 进行逻辑右移 3 操作。正确答案是什么?

  1. +203
  2. +83
  3. +3
  4. -3

2 的 -28 的补码是 11100100。现在,如果我应用逻辑右移操作,我不会得到上述任何一个答案。

0 投票
4 回答
12922 浏览

java - >> 在 Java 中做什么?

好的,我尝试查找什么>>,或 shift 的意思,但正如这个网站所解释的那样,这让我无法理解:http ://www.janeg.ca/scjp/oper/shift.html

如果和孩子说话,会是什么解释?

0 投票
6 回答
10924 浏览

java - 应用于字节变量的无符号右移行为

考虑以下java代码片段

输出:

预期输出:

如何?因此,1111 0001 在无符号右移后,二进制中的 b 为 b但为什么会这样 呢?0000 11110x0f0xff

0 投票
3 回答
1961 浏览

objective-c - 算术移位

逻辑右移和算术右移有什么区别?

0 投票
8 回答
24183 浏览

c - 为什么对 C 枚举定义中的值使用按位移位运算符?

Apple 有时在其枚举定义中使用 Bitwise-Shift 运算符。例如,在 Core Graphics 的CGDirectDisplay.h文件中:

为什么不简单地在“正常”枚举中使用递增int呢?

0 投票
2 回答
175 浏览

c - 左移操作中的意外输出...?

我读到左移e1<<e2相当于e1* 2e2. 但是对于代码:

输出是40但根据我应该是30。因为x<<4它是80 .(但预计是40)。

虽然 forx<<1x<<2output 是1020符合预期。

请解释一下这个逻辑。