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

java - 操纵二的大幂的有效方法

编码 2 的幂的最有效方法是对整数进行位移。

1 << n给我2^n

但是,如果我有一个大于 aint或 a中允许的最大值的数字long,我可以使用什么来有效地操纵 2 的幂?

(我需要能够对数字进行加法、乘法、除法和模运算)

0 投票
3 回答
966 浏览

c++ - C++ 位移

我是使用 C++ 中的位和字节的新手,我正在查看一些以前开发的代码,我需要一些帮助来理解代码的情况。有一个字节数组并用一些数据填充它,我注意到数据是带有 0x0F 的“&”(请参阅​​下面的代码片段)。我真的不明白那里发生了什么....如果有人可以解释一下,那将非常感激。谢谢!

0 投票
2 回答
3119 浏览

c - C中的位移和指针怪异,寻找解释

我发现了一些我无法解释的奇怪现象。如果这里有人可以看到这是什么或为什么会发生,我想知道。我正在做的是采用一个包含 12 位高对齐的无符号短,如下所示:

1111 1111 1111 0000

然后我想改变这些位,以便短字节中的每个字节保持 7 位,并将 MSB 作为填充。上面显示的结果应如下所示:

0111 1111 0111 1100

我所做的是这样的:

这给了我一些看起来像是正确的东西,但是最后一次移位的结果使位设置如下:

0111 1111 1111 1100

很奇怪。如果我使用 unsigned char 作为临时存储并转移它,那么它就可以工作,如下所示:

结果是:

0111 1111 0111 1100

有什么想法吗?

0 投票
2 回答
2675 浏览

c - 循环移位 c

我必须将 int 向右移动一个位置并返回

在 Java 中,我可以只返回 n >> 1;

这在C中可能吗?

我们给出的方法如下

0 投票
4 回答
2084 浏览

c++ - 从十六进制获取 LSB 的值(C 代码)

我在 C 中有这样的代码:

我需要提取它以使最终值为:

如果十六进制值至少有 1 个零,我只能提取并使其工作:

使用下面的代码:

似乎最后一个 else {...} 块对我来说很麻烦。有任何想法吗?谢谢!

0 投票
6 回答
4370 浏览

java - 为什么右移运算符产生零而不是一?

我正在自学 Java,并完成了 Thinking in Java 中的练习。

在第 116 页,练习 11,您应该将一个整数右移到其所有二进制位置,并使用 Integer.toBinaryString 显示每个位置。

在解决方案指南中,输出如下所示:

当我运行这段代码时,我得到了这个:

这里发生了什么。数字被切断了吗?

我正在使用 jdk1.6.0_20 64bit。本书使用jdk1.5 32bit。

0 投票
2 回答
14542 浏览

c++ - 移位计数为负数或错误太大 - 正确的解决方案?

我有以下函数用于读取大端四字(在抽象基文件 I/O 类中):

readb() 函数读取一个 BYTE。以下是使用的 typedef:

问题是我在移位操作的前四行收到了 4 个编译器警告:

警告 C4293:“<<”:移位计数为负数或太大,未定义的行为

我理解为什么会出现此警告,但我似乎无法弄清楚如何正确摆脱它。我可以做类似的事情:

qT |= (unsigned long long)readb() << 56;

这消除了警告,但没有任何其他问题,BYTE 会一直正确延长吗?也许我只是想太多了,解决方案就是这么简单。你们能帮我吗?谢谢。

0 投票
2 回答
11187 浏览

c - Bit Twiddling Hacks:以明显的方式交错位

我对这个问题很感兴趣

交错位是显而易见的方式

(来自http://graphics.stanford.edu/~seander/bithacks.html

有人可以用一个例子向我解释这是如何工作的吗?

例如,如果我们有x = 100101and y = 010101,结果会是什么?

0 投票
3 回答
727 浏览

assembly - 8086 汇编中的大二进制移位?

我有一个 512 字节长的二进制数据块,我想知道如果我想将它向右移动一次,最有效的方法是什么。

我现在最好的猜测(对组装来说非常新)是我必须首先检查一个块(可能是 int),看看它会移出什么,移出,然后携带之前的 int 会移出的任何内容并继续携带这下移了数据。有没有更简单的方法?如果我必须使用这种进位技术,我可以移动的最大块是多少?双字?QWord?

0 投票
2 回答
892 浏览

vb.net - 将某些程序集转换为 VB.NET - SHR 运算符的工作方式不同?

好吧,这里有个简单的问题

我正在研究一些汇编,并将一些汇编例程转换回 VB.NET

现在,在汇编中,我遇到了一个特定的代码行,假设如下:

然后执行以下行

这给了我以下信息:

现在,在 VB.NET 中,我执行以下操作

哪个应该给我相同的......但它有一点不同,而不是值 0F0D0408 我得到 FF0D0408

那么这里发生了什么?