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

c - 汇编语言到 C

所以我有以下汇编语言代码,我需要将其转换为 C。我对几行代码感到困惑。

我知道这是一个for循环。我在每一行都添加了我的评论。

我认为for循环是这样的

测试条件是什么?我该如何改变它?

查看汇编代码,变量'n'有什么作用?

这是 Intel x86 所以格式是 movl = source, dest

0 投票
6 回答
95549 浏览

c - 有符号整数的算术位移

我试图弄清楚算术位移运算符在 C 中是如何工作的,以及它将如何影响带符号的 32 位整数。

为简单起见,假设我们在一个字节(8 位)内工作:

阅读 Stack Overflow 和一些网站上的其他帖子,我发现: <<将移向 MSB(在我的情况下是向左),并用 0 填充“空”LSB 位。

并将>>移向 LSB(在我的情况下向右)并用 MS 位填充“空”位

因此,x = x << 7将导致将 LSB 移动到 MSB,并将所有内容设置为 0。

现在,假设我会>> 7,最后的结果。这会导致[0000.0010]? 我对吗?

我对轮班操作员的假设是否正确?

我刚刚在我的机器上测试过,**

为什么?

0 投票
4 回答
15782 浏览

c++ - 什么是 0xFF,为什么要移动 24 次?

0x000000FF 代表什么?我知道十进制 15 用十六进制表示为 F,但为什么它是 << 24?

0 投票
4 回答
34870 浏览

java - 我应该在Java中移位以除以2吗?

可能的重复:
移位比Java中的乘法和除法更快吗?。网?
快速Java优化问题

很多年前在大学里,我了解到右移一位与除以二的效果相同,但通常要快得多。我不确定自 9 到 10 年前我了解到 Java 在这方面是如何发展的。Java编译器会自动将除以二转换为移位操作,还是我应该自己在代码中手动执行移位操作?

0 投票
1 回答
807 浏览

vb.net - VB.NET 位移混淆

我有一些关于 VB.NET 位移的问题。我了解<< >>运算符是 VB.NET 中的位移运算符。

我有一个两字节的十六进制值,0x3ACC这两个字节中的每一位代表一天、一个月或一年。这个十六进制值的位结构是yyyy yyym mmmd dddd

我很困惑我应该如何对这些值进行位移,以便年、月和日处于它们自己的UINT16值中。移位数字应该是什么,我需要在移位中添加任何填充吗?

0 投票
5 回答
4451 浏览

c++ - 非整数类型数字右移

我有以下代码

但它不起作用,并且出现此错误:

在函数'int main()'中:第7行:错误:'float'和'double'类型的无效操作数到二进制'operator>>'编译由于-Wfatal-errors而终止。

这里允许在 C/C++ 编译器中右移吗?我正在使用视觉工作室 2010。

0 投票
6 回答
76915 浏览

c - 警告:左移计数 >= 类型宽度

我对处理位非常陌生,并且在编译时遇到了以下警告:

我的第 7 行看起来像这样

long如果我的系统上的大小是 32 位,这将是有意义的。但是,sizeof(long)返回8并被CHAR_BIT定义为8建议 long 应该是 8x8 = 64 位长。

我在这里想念什么?是sizeofCHAR_BIT准确的还是我误解了一些基本的东西?

0 投票
1 回答
315 浏览

c++ - 在 C++ 中枚举 k 维超立方体的顶点的最有效方法是什么?

基本问题: 我有 ak 尺寸盒。我有一个上限和下限的向量。枚举顶点坐标的最有效方法是什么?

背景: 例如,假设我有一个 3 维盒子。获得最有效的算法/代码是什么:

其中 L_0 对应于下界向量的第 0 个元素,同样 U_2 是上界向量的第 2 个元素。

我的代码:

其中变量bound声明为:

但我已经预先调整了它的大小,以免在循环分配内存中浪费时间。每次我运行我的算法时,我都需要调用上述过程大约 50,000,000 次——所以我需要这个过程非常有效。

可能的子问题:移动k而不是总是移动1并存储中间结果是否会更快?(我应该使用 >>= 吗??)

0 投票
8 回答
828 浏览

c++ - 在 C++ 中,哪个更快?(2 * i + 1) 还是 (i << 1 | 1)?

我意识到答案可能是特定于硬件的,但我很好奇我是否缺少更一般的直觉?

我问了这个问题并给出了答案,现在我想知道我是否应该改变我的方法以使用“(i << 1 | 1)”而不是“(2 * i + 1)”?

0 投票
4 回答
146 浏览

c - 用单个数值表示前 10 名列表的方法

我有一个带有分数(最高分获胜)和时间戳的前 10 名列表。

时间戳用于平分的情况,在这种情况下,时间戳最低的平分获胜(第一个获得分数的人排名更高)。

排序数据集示例:

注意得分 14 的平局,时间戳较小的得分较高。

我需要以正确的顺序将分数和时间戳表示为单个 32 位值。

假设最高分数为 100 万。

我通过减去第一个有效日期分数来减少时间戳值。

这如何在 C 中实现?