【问题标题】:How is data stored in a bit vector?数据如何存储在位向量中?
【发布时间】:2013-05-23 20:00:37
【问题描述】:

我有点困惑固定大小的位向量如何存储其数据。 假设我们有一个位向量 bv,我想将 hello 存储为 ASCII。

所以我们做bv[0]=104bv[1]=101bv[2]=108bv[3]=108bv[4]=111

hello 的 ASCII 在位向量中是如何表示的?

是不是像这样的二进制:[01101000][01100101][01101100][01101100][01101111]
或者像这样的ASCII:[104][101][108][108][111]

以下论文HAMPI在第3.5节第2步,作者正在将ascii码分配给位向量,但我对char在位向量中的表示方式感到困惑。

【问题讨论】:

  • 我相信这取决于语言如何在内部表示。

标签: data-structures language-agnostic bitvector


【解决方案1】:

首先,您可能应该阅读what a bit vector is,以确保我们在同一页面上。

位向量不代表 ASCII 字符,它们代表 。尝试在位向量上执行 bv[0]=104 可能无法编译/运行,或者,如果确实如此,它非常不太可能达到您的预期。

您希望得到支持的操作类似于set the 5th bit to 1set the 10th bit to 0set all these bit to thisOR the bits of these two vectors 以及可能的其他一些。

这些实际上如何存储在内存中完全取决于编程语言,除此之外,它甚至可能完全取决于该语言的给定实现。

一般 共识(不是规则)是每个位应在内存中占用大约 1 位(平均而言,可能会稍微多一些,因为可能存在与存储这些相关的开销)。

作为一个示例(Java 是如何做到的),您可以有一个 64 位数字的数组并在每个位置存储 64 位。在这种情况下,转换为 ASCII 是没有意义的。

你应该知道的另一件事 - 甚至 ASCII 也会作为位存储在内存中,所以这两个数组本质上是相同的,除非你的意思是别的。

【讨论】:

  • 好的。让我们忘记 bv[x]= 一些 ASCII。你能用位向量来存储hello吗?或任何数据类型,理论上如何表示不在内存中?我在某处读到位向量用于表示不同的数据类型,例如字符串、整数等,但不知道这怎么可能。我还是一头雾水
  • 如果您查看本文第 3.5 节并阅读步骤 2 people.csail.mit.edu/akiezun/issta54-kiezun.pdf 。他们正在使用位向量在其中存储 ascii 字符。
  • @msr 老实说,我看不出那篇论文描述的内容与字符数组有何不同(并不是说我现在有足够的时间彻底阅读整个内容以准确理解),所以它是大小为 6 的数组,每个元素的大小为 1 字节/8 位,每个元素代表 1 个 ASCII 字符。我认为这篇论文对于理解这个问题至关重要,如果你想要一个更好、更具体的答案,你可能想把它放在你的问题中(最好将整个步骤 2 复制到问题中,而不是仅仅链接到它)。跨度>
  • 我也是这么理解的。但由于位向量由 0 和 1 组成,所以我认为每个 char 在位向量的每个桶中都表示为二进制。无论如何,谢谢你的帮助。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多