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

c - 我在哪里可以找到 C 的位移指南?

我看过什么是位移(位移)运算符以及它们是如何工作的?,但我仍然觉得位移的概念很难理解。

有人可以指出我在 C 中移位的更基本指南的方向吗?我希望它会很长,因为它需要涵盖整个主题。

我正在学习C 编程语言(AKA K&R),这就是它的用途,所以我可以做练习。我了解基础知识,但我仍然无法进行正确的位移操作。

以下是让我难过的 K&R 的练习

练习 2-6:编写一个函数 setbits(x, p, n, y) 返回 x,其中从位置 p 开始的 n 位设置为 y 的最右边 n 位,其他位保持不变。

练习 2-7:编写一个函数 invert(x, p, n),它返回 x,其中从位置 p 开始的 n 位反转(即 1 变为 0,反之亦然),其他保持不变。

练习 2-8:编写一个函数 rightrot(x, n),返回整数 x 向右旋转 n 位的值

练习 2-9:在二进制补码系统中,x &= (x-1) 删除 x 中最右边的 1 位。解释原因,并使用此观察来编写更快的 bitcount 版本。

这些是 k&R(C 编程语言)书中的练习。这是最好的 C 书籍,但我无法理解位移,所以我在这些练习中遇到了问题。

0 投票
9 回答
7333 浏览

c - 我可以在 C 编程中使用乘法和除法来移位吗?

代替使用>><<移位,是否可以使用*/左右移位?

对于 8 位:0x01 * 2 = 0000|0010。

0 投票
42 回答
36438 浏览

bit-manipulation - 您是否曾经在实际项目中不得不使用位移位?

您是否曾经在实际的编程项目中不得不使用位移位?大多数(如果不是全部)高级语言中都有移位运算符,但是你什么时候真正需要使用它们呢?

0 投票
4 回答
2670 浏览

c - 为什么这种按位右移似乎不起作用?

有人可以向我解释为什么面具根本没有向右移动吗?你可以用任何东西代替那个 1 ,结果是一样的。

0 投票
3 回答
2101 浏览

c# - 为什么在移位 32 位值时只使用移位操作数的低五位?(例如(UInt32)1 << 33 == 2)

考虑以下代码:

它不会产生警告(关于使用大于 32 的移位),因此它必须是预期的行为。

实际输出到生成程序集的代码(或至少 Reflector 对代码的解释)是

IL(再次,使用反射器)是

我了解发生了什么(在MSDN中有描述);编译代码时,移位 32 位值时仅使用低 5 位...我很好奇为什么会发生这种情况。

(出现的方式shift33a也让我认为 Reflector 不太对劲,因为他们对 IL 的 c# 表示会编译成不同的东西)

问题:

  • 为什么只使用“要移位的值”的低 5 位?
  • 如果“移动超过 31 位没有意义”,为什么没有警告?
  • 这是向后兼容的事情吗(即这是程序员“期望”发生的事情)?
  • 我是否正确,底层 IL 可以进行超过 31 位的移位(如L_0010: ldc.i4.s 0x21),但编译器正在修整这些值?
0 投票
7 回答
29725 浏览

c# - 左位移 255(作为一个字节)

谁能解释为什么以下内容无法编译?

错误:

常量值“510”不能转换为“字节”

我期待以下二进制文件:

类型转换难倒了我。

0 投票
4 回答
4412 浏览

c# - 是否有任何 C# 位移位运算符将溢出的位移动到变量的另一端?

我们称之为“<<<”

等于

(假设 << 和 >> 丢弃溢出的位)

有这样的运营商吗?

0 投票
6 回答
27444 浏览

c++ - 零位移位会正常工作吗?

假设我有这样的功能:

每次从不同站点调用它bitCount都是非负的,并且在int. 我特别关心bitCount等于零的呼叫 - 那么它会正常工作吗?

编译器在编译其调用站点时看到函数的整个代码是否有可能将bitCount等于零的调用减少为无操作?

0 投票
7 回答
1923 浏览

c# - C# 中的位移混淆

我有一些像这样的旧代码:

它很长,我想我可以像这样修剪它:

但是,我没有得到与第一个函数相同的值。该字节包含 00000000 或 10000000。我在这里缺少什么?我是否使用了不正确的运算符?

0 投票
5 回答
26782 浏览

c - 位运算符和“字节序”

字节顺序与按位运算无关吗?是逻辑的还是转移的?

我正在做有关按位运算符的作业,但我无法对其进行正面或反面,而且我认为我对字节序非常感兴趣。也就是说,我正在使用一个小端机器(就像大多数机器一样),但这是否需要考虑或者这是一个浪费的事实?

万一这很重要,我正在使用C。