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

c - C中的移位运算符(<<,>>)是算术还是逻辑?

在 C 中,移位运算符 ( <<, >>) 是算术还是逻辑?

0 投票
7 回答
20912 浏览

c - 如何将字节数组移动 12 位

我想将字节数组的内容向左移动 12 位。

例如,从这个类型的数组开始uint8_t shift[10]

我想将它向左移动 12 位,结果是:

0 投票
6 回答
5617 浏览

c# - 我可以使用无符号右移防止 C# 中的整数溢出吗?

我希望 alwaysPositive 被分配一个正数,其中 lareValue1 和 largeValue2 的所有可能值(这些至少为 1)。

以下语句导致缓冲区溢出:

我知道我可以通过减去和添加来防止它:

但在其他编程语言中,我可以使用无符号位移位来解决问题:

我怎样才能在 C# 中做到这一点?


下面的答案都解决了这个问题。可能有很多方法可以做到这一点,但它们(包括我的解决方案)都有一个共同点:它们看起来都被混淆了。

0 投票
11 回答
765480 浏览

language-agnostic - 什么是按位移位(bit-shift)运算符,它们是如何工作的?

我一直在尝试在业余时间学习 C,其他语言(C#、Java 等)具有相同的概念(并且通常是相同的运算符)...

我想知道的是,在核心层面上,位移 ( <<, >>, >>>) 有什么作用,它可以帮助解决什么问题,以及在拐弯处潜伏着什么陷阱?换句话说,绝对是初学者的移位指南。

0 投票
5 回答
7975 浏览

java - 如何在 Java 中将 int 转换为三个字节?

我正在尝试将一个转换intbytes三个代表那个int(大端)。

我确信它与按位和位移有关。但我不知道该怎么做。

例如:

*注意,我知道一个 int 是 4 个字节,这三个字节有可能上溢/下溢。

0 投票
6 回答
11584 浏览

c - 需要帮助理解 K&R C 第 2 章中的“getbits()”方法

在第 2 章,关于按位运算符的部分(第 2.9 节)中,我无法理解其中一种示例方法的工作原理。

这是提供的方法:

这个想法是,对于给定的数字x,它将返回从位置p开始的n位,从右侧开始计数(最右边的位是位置 0)。给定以下方法:main()

输出是:

getbits(63892 (f994), 4, 3) = 5 (5)

我得到了其中的一部分,但在“大图”方面遇到了麻烦,主要是因为我不理解的位(不是双关语)。

我特别有问题的部分是补充部分:~(~0 << n). 我想我得到了第一部分,处理x;这是我正在努力解决的部分(然后是掩码)——以及它们是如何结合在一起来实际检索这些位的。(我已经验证了它正在做的事情,包括代码和使用 calc.exe 检查我的结果——感谢上帝,它有一个二进制视图!)

有什么帮助吗?

0 投票
6 回答
4523 浏览

c++ - 位运算符在 C++ 中附加两个无符号字符

如果我有两件事是十六进制的,我可以有人如何将他们的二进制文件附加在一起以获得一个值吗?

在 C++ 中,说我有

我想要的是不知何故, 1100001010100011这可能使用按位运算符吗?

我想提取 t 和 q 的二进制形式并附加它们......

0 投票
6 回答
806 浏览

c# - 我转换为 Short 的二进制数据是否有效?

我正在读取由一台设备生成的二进制日志文件。

我有一个字节[]中的数据。

如果我需要读取两个字节来创建一个短的,我可以这样做:

现在我知道该值对于有效数据是正确的。

我怎么知道文件是否被弄乱了,让我们说值 FF FF 在字节数组的这两个地方?

当我查看将 FF FF 转换为 short 的结果值时,我得到 -1。

这是 FF FF 的正常值吗?还是计算机刚刚遇到某种短路并使用无效数据翻转?

出于我的目的,所有这些数字都将是积极的。如果 FF FF 实际上是一个短的 -1,那么我只需要验证我的所有结果都是正数。

谢谢你,
基思

顺便说一句,我也在阅读其他数字数据类型。我会在这里展示它们只是因为。Read 函数是从 byte[] 读取的基本部分。所有其他数据类型的读取都使用基本的 Read() 函数。

0 投票
6 回答
4805 浏览

c++ - 获取一个字节中 4 个最低有效位的最快方法是什么(C++)?

我说的是这个:

如果我们有字母“A”,它是十进制的 77 和十六进制的 4D。我正在寻找获得 D 的最快方法。

我想了两个办法:

给定 x 是一个字节。

  1. x << 4; x >> 4

  2. x %= 16

还有其他方法吗?哪个更快?

0 投票
4 回答
7026 浏览

c - 如何连接按顺序存储在数组中的上下半字节?

我有一个包含半字节列表的数组:

我想通过左移上半字节并将其与下半字节连接来将相邻的半字节组合成单个字节。输出应如下所示:

我怎样才能在 C 中实现这一点?