问题标签 [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.
java - 操纵二的大幂的有效方法
编码 2 的幂的最有效方法是对整数进行位移。
1 << n
给我2^n
但是,如果我有一个大于 aint
或 a中允许的最大值的数字long
,我可以使用什么来有效地操纵 2 的幂?
(我需要能够对数字进行加法、乘法、除法和模运算)
c++ - C++ 位移
我是使用 C++ 中的位和字节的新手,我正在查看一些以前开发的代码,我需要一些帮助来理解代码的情况。有一个字节数组并用一些数据填充它,我注意到数据是带有 0x0F 的“&”(请参阅下面的代码片段)。我真的不明白那里发生了什么....如果有人可以解释一下,那将非常感激。谢谢!
c - C中的位移和指针怪异,寻找解释
我发现了一些我无法解释的奇怪现象。如果这里有人可以看到这是什么或为什么会发生,我想知道。我正在做的是采用一个包含 12 位高对齐的无符号短,如下所示:
1111 1111 1111 0000
然后我想改变这些位,以便短字节中的每个字节保持 7 位,并将 MSB 作为填充。上面显示的结果应如下所示:
0111 1111 0111 1100
我所做的是这样的:
这给了我一些看起来像是正确的东西,但是最后一次移位的结果使位设置如下:
0111 1111 1111 1100
很奇怪。如果我使用 unsigned char 作为临时存储并转移它,那么它就可以工作,如下所示:
结果是:
0111 1111 0111 1100
有什么想法吗?
c - 循环移位 c
我必须将 int 向右移动一个位置并返回
在 Java 中,我可以只返回 n >> 1;
这在C中可能吗?
我们给出的方法如下
c++ - 从十六进制获取 LSB 的值(C 代码)
我在 C 中有这样的代码:
我需要提取它以使最终值为:
如果十六进制值至少有 1 个零,我只能提取并使其工作:
使用下面的代码:
似乎最后一个 else {...} 块对我来说很麻烦。有任何想法吗?谢谢!
java - 为什么右移运算符产生零而不是一?
我正在自学 Java,并完成了 Thinking in Java 中的练习。
在第 116 页,练习 11,您应该将一个整数右移到其所有二进制位置,并使用 Integer.toBinaryString 显示每个位置。
在解决方案指南中,输出如下所示:
当我运行这段代码时,我得到了这个:
这里发生了什么。数字被切断了吗?
我正在使用 jdk1.6.0_20 64bit。本书使用jdk1.5 32bit。
c++ - 移位计数为负数或错误太大 - 正确的解决方案?
我有以下函数用于读取大端四字(在抽象基文件 I/O 类中):
readb() 函数读取一个 BYTE。以下是使用的 typedef:
问题是我在移位操作的前四行收到了 4 个编译器警告:
警告 C4293:“<<”:移位计数为负数或太大,未定义的行为
我理解为什么会出现此警告,但我似乎无法弄清楚如何正确摆脱它。我可以做类似的事情:
qT |= (unsigned long long)readb() << 56
;
这消除了警告,但没有任何其他问题,BYTE 会一直正确延长吗?也许我只是想太多了,解决方案就是这么简单。你们能帮我吗?谢谢。
c - Bit Twiddling Hacks:以明显的方式交错位
我对这个问题很感兴趣
交错位是显而易见的方式
有人可以用一个例子向我解释这是如何工作的吗?
例如,如果我们有x = 100101
and y = 010101
,结果会是什么?
assembly - 8086 汇编中的大二进制移位?
我有一个 512 字节长的二进制数据块,我想知道如果我想将它向右移动一次,最有效的方法是什么。
我现在最好的猜测(对组装来说非常新)是我必须首先检查一个块(可能是 int),看看它会移出什么,移出,然后携带之前的 int 会移出的任何内容并继续携带这下移了数据。有没有更简单的方法?如果我必须使用这种进位技术,我可以移动的最大块是多少?双字?QWord?
vb.net - 将某些程序集转换为 VB.NET - SHR 运算符的工作方式不同?
好吧,这里有个简单的问题
我正在研究一些汇编,并将一些汇编例程转换回 VB.NET
现在,在汇编中,我遇到了一个特定的代码行,假设如下:
然后执行以下行
这给了我以下信息:
现在,在 VB.NET 中,我执行以下操作
哪个应该给我相同的......但它有一点不同,而不是值 0F0D0408 我得到 FF0D0408
那么这里发生了什么?