问题标签 [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.
c - 汇编语言到 C
所以我有以下汇编语言代码,我需要将其转换为 C。我对几行代码感到困惑。
我知道这是一个for
循环。我在每一行都添加了我的评论。
我认为for
循环是这样的
测试条件是什么?我该如何改变它?
查看汇编代码,变量'n'有什么作用?
这是 Intel x86 所以格式是 movl = source, dest
c - 有符号整数的算术位移
我试图弄清楚算术位移运算符在 C 中是如何工作的,以及它将如何影响带符号的 32 位整数。
为简单起见,假设我们在一个字节(8 位)内工作:
阅读 Stack Overflow 和一些网站上的其他帖子,我发现:
<<
将移向 MSB(在我的情况下是向左),并用 0 填充“空”LSB 位。
并将>>
移向 LSB(在我的情况下向右)并用 MS 位填充“空”位
因此,x = x << 7
将导致将 LSB 移动到 MSB,并将所有内容设置为 0。
现在,假设我会>> 7
,最后的结果。这会导致[0000.0010]
? 我对吗?
我对轮班操作员的假设是否正确?
我刚刚在我的机器上测试过,**
为什么?
c++ - 什么是 0xFF,为什么要移动 24 次?
0x000000FF 代表什么?我知道十进制 15 用十六进制表示为 F,但为什么它是 << 24?
java - 我应该在Java中移位以除以2吗?
可能的重复:
移位比Java中的乘法和除法更快吗?。网?
快速Java优化问题
很多年前在大学里,我了解到右移一位与除以二的效果相同,但通常要快得多。我不确定自 9 到 10 年前我了解到 Java 在这方面是如何发展的。Java编译器会自动将除以二转换为移位操作,还是我应该自己在代码中手动执行移位操作?
vb.net - VB.NET 位移混淆
我有一些关于 VB.NET 位移的问题。我了解<< >>
运算符是 VB.NET 中的位移运算符。
我有一个两字节的十六进制值,0x3ACC
这两个字节中的每一位代表一天、一个月或一年。这个十六进制值的位结构是yyyy yyym mmmd dddd
。
我很困惑我应该如何对这些值进行位移,以便年、月和日处于它们自己的UINT16
值中。移位数字应该是什么,我需要在移位中添加任何填充吗?
c++ - 非整数类型数字右移
我有以下代码
但它不起作用,并且出现此错误:
在函数'int main()'中:第7行:错误:'float'和'double'类型的无效操作数到二进制'operator>>'编译由于-Wfatal-errors而终止。
这里允许在 C/C++ 编译器中右移吗?我正在使用视觉工作室 2010。
c - 警告:左移计数 >= 类型宽度
我对处理位非常陌生,并且在编译时遇到了以下警告:
我的第 7 行看起来像这样
long
如果我的系统上的大小是 32 位,这将是有意义的。但是,sizeof(long)
返回8
并被CHAR_BIT
定义为8
建议 long 应该是 8x8 = 64 位长。
我在这里想念什么?是sizeof
不CHAR_BIT
准确的还是我误解了一些基本的东西?
c++ - 在 C++ 中枚举 k 维超立方体的顶点的最有效方法是什么?
基本问题: 我有 ak 尺寸盒。我有一个上限和下限的向量。枚举顶点坐标的最有效方法是什么?
背景: 例如,假设我有一个 3 维盒子。获得最有效的算法/代码是什么:
其中 L_0 对应于下界向量的第 0 个元素,同样 U_2 是上界向量的第 2 个元素。
我的代码:
其中变量bound
声明为:
但我已经预先调整了它的大小,以免在循环分配内存中浪费时间。每次我运行我的算法时,我都需要调用上述过程大约 50,000,000 次——所以我需要这个过程非常有效。
可能的子问题:移动k而不是总是移动1并存储中间结果是否会更快?(我应该使用 >>= 吗??)
c++ - 在 C++ 中,哪个更快?(2 * i + 1) 还是 (i << 1 | 1)?
我意识到答案可能是特定于硬件的,但我很好奇我是否缺少更一般的直觉?
我问了这个问题并给出了答案,现在我想知道我是否应该改变我的方法以使用“(i << 1 | 1)”而不是“(2 * i + 1)”?
c - 用单个数值表示前 10 名列表的方法
我有一个带有分数(最高分获胜)和时间戳的前 10 名列表。
时间戳用于平分的情况,在这种情况下,时间戳最低的平分获胜(第一个获得分数的人排名更高)。
排序数据集示例:
注意得分 14 的平局,时间戳较小的得分较高。
我需要以正确的顺序将分数和时间戳表示为单个 32 位值。
假设最高分数为 100 万。
我通过减去第一个有效日期分数来减少时间戳值。
这如何在 C 中实现?