问题标签 [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 投票
2 回答
22530 浏览

vb.net - 如何在 VB.NET 中按位移位?

如何在 VB.NET 中按位右移/左移?它甚至有为此的运算符,还是我必须使用一些实用方法?

0 投票
5 回答
8440 浏览

c# - 在 .NET 中移动符号位

我正在从单色位图中读取位。我short以相反的顺序存储每16位。如果位图中的位为黑色,则存储 1。如果为白色,则存储 0。

例如:对于位图:bbbw bbbw bbbw wwww
我的简称是:0000 0111 0111 0111

我尝试这样做的第一种方法是:

经过一次分配和轮班后,我得到了预期的 -32768(1000 0000 0000 0000)。
第二次后我得到-16384(1100 0000 0000 0000)。

我更改了要使用的代码ushort并将if行更改为s |= (ushort)Math.Pow(2, 15);,现在它可以工作了。

我的问题是:为什么符号位不会在 .NET 中移动?有没有办法移动符号位?

0 投票
1 回答
2181 浏览

operators - 使用 ALU 运算符的一位右桶移位?

我想知道是否有一种仅使用 ALU 运算符(NOT、OR、AND、XOR、ADD、SUB)对 8 位二进制值执行右移的有效方法

我已经能够通过将 8 位二进制值与自身相加来实现左移,因为左移相当于乘以 2。但是,我想不出一种方法来实现右移。

到目前为止,我想出的唯一方法是只执行 7 次左桶移位。这是唯一的方法吗?

0 投票
4 回答
15687 浏览

c++ - 位左移

假设我想向左移位i两次并将值存储在f.

那是对的吗?我究竟如何在 C/C++ 中做到这一点?

0 投票
1 回答
1670 浏览

php - PHP右移和否定结果?

我在将一些 C 代码转换为 PHP 时遇到了问题,特别是在使用右移运算符时。

编辑:在以下示例中,位 = 0;

原始C代码:

PHP代码:

如果我从codeword130728 开始,在 CI 中得到预期的结果 -1。在 PHP 中我得到 255。我知道这与算术/逻辑移位差异有关,并且由于 MSB 保持为零而没有引入负号。

在 PHP 中是否有不涉及转移的“快速”方法?例如,通过基本算术或类似方法,这会给我预期的答案吗?

0 投票
4 回答
1550 浏览

c++ - 使用移位运算符除以任意数

n例如,如何24使用移位运算符和加法来划分一个数字?

( n % 24 == 0)

0 投票
7 回答
37676 浏览

javascript - 什么是 JavaScript >>> 运算符以及如何使用它?

我正在查看来自 Mozilla 的代码,该代码向 Array 添加了过滤方法,其中有一行代码让我感到困惑。

我以前从未见过 >>> 在 JavaScript 中使用。
它是什么,它有什么作用?

0 投票
6 回答
58536 浏览

c - C语言中的负数右移

我有 C 代码,我在其中执行以下操作。

现在当我尝试

我明白了

这是预期的吗?

我能想到类似的东西

也就是说,-32767.5 四舍五入为 -32768。

这种理解正确吗?

0 投票
2 回答
5300 浏览

c# - 为什么我得到一个负值位移的奇怪结果?

这个问题不是这个问题的重复。

我遇到了一种情况,我可能不得不将(正)数左移一个负值,即 8 << -1。在这种情况下,我希望结果为 4,但我以前从未这样做过。所以我编写了一个小测试程序来验证我的假设:

令我震惊和惊讶的是,这给了我以下输出:

谁能解释这种行为?

这是一个小红利。我将左移更改为右移,并得到以下输出:

0 投票
1 回答
1620 浏览

assembly - x86汇编右移运算符SHR的副作用?

我正在使用 ASM 调试器 ollydbg 跟踪一个程序,我遇到了这个代码片段,它是一个循环段:

我可以跟踪并了解其他操作员所做的事情,当我追踪它时,这很有意义。但是 SHR EBX,CL 对我来说没有意义。

但是我在跟踪时看到的是,如果循环迭代是奇数,则丢弃 LSB 并将 MSB 移动到它的位置。如果它是偶数,那么 ebx 是不变的。每次循环迭代,ecx寄存器变化如下:

我期望看到的是在第二个或第三个循环之后,ebx 总是会被清零,因为 0x20 你已经移动了 32 位。

我有点困惑,有人能解释一下吗?

谢谢