问题标签 [bit-packing]
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++ - 指定结构中数组元素的位大小
现在我有一个看起来像这样的结构:
有没有办法让所有val
sa 单个数组?重点不是占用空间,而是所有值的位置:我需要它们在内存中没有填充,并且每个占用 2 位。拥有数组并不重要,任何其他通过索引进行简单访问的数据结构都可以,不管它是纯 C 还是 C++。读/写性能很重要——它应该与现在用于索引访问的简单位操作相同(类似于)。
更新:
我到底想要什么可以描述为
integer - fortran中的小整数
我需要在 fortran 中创建一个仅包含 1 和 -1 的大型整数数组。有人可以建议我如何定义这样一个占用尽可能少的内存空间的数组吗?
谢谢
c# - C# - 包装日期、月份、年份
在 Programming in the Key of C# 中,作者给出了一个示例(带有源代码),说明如何将日期(年、月、日 - 以数字表示)打包为 32 位整数。在示例中,作者将信息打包如下:
如果我掌握得当,左移 9 只给我们一个 512 的值(如果计算每个位位置,则为 1023)。但是,我注意到在运行程序时可以存储 2014(年)之类的值。这么小的值怎么可能?我误解了这段代码吗?再多的阅读、观看或玩弄代码都无法帮助我理清思路。
c++ - 将字符打包成 5 位并将结果写入文件(C++)
我有一个包含字符的向量。这些字符只能是字母表中的 26 个大写字母,因此表示这些字符的位数可以从 8 位减少到 5 位。然后我需要将结果写入文件,以备后用。
我目前的想法是 A..Z 的 3 个最高有效位都是相同的,因此我可以使用 5 个最低有效位来唯一标识字符吗?但是我正在努力将这些未格式化的数据写入文件。
我将如何执行此操作并将结果写入文件?
java - 将多个值打包成单一数据类型
我有兴趣创建一个类以更紧凑的方式存储数据,我知道我可以轻松存储 0 到 2^(x)-1 之间的数字,以及使用按位运算符存储布尔值,但我对更多奇数,例如最多 6 个或其他东西。我已经在脑海中摆弄它大约一个星期了,现在已经在谷歌上搜索了大约一个小时,但我真的找不到任何帮助。
我正在寻找一种算法或其他东西来帮助我弄清楚如何最好地打包介于 0 和 1 到 32ish 之间的随机数之间的数据......
我只是对此进行头脑风暴,并且还想知道是否应该考虑这样的压缩。我正在研究这个的原因之一是巨大的阵列等。对不起,如果这是一个愚蠢的问题,我的大脑最近不是很敏锐。
此外,最大值示例:1,5,8,3,12,19
我正在考虑的最终课程将类似于:
谢谢你的帮助,~vzybilly~
c++ - 结构位打包和 LSB / MSB 歧义 C++
我必须为以下数据包头编写 C++ 代码:
这是我为上述数据包格式编写的结构代码。我想知道 uint8_t 或 uint16_t 位字段是否正确
如何确保 LSB -> MSB 保留在 struct 中?
我一直感到困惑,我已经尝试阅读,但它最终让我更加困惑。
PS:我使用的是 32 位处理器。
compression - GLSL - 将多个 0-1 颜色(var4)压缩/打包成一个 var4 变量
我正在尝试在 GLSL 2 es 中执行以下操作:
给定一个数量(例如 4 个)归一化var4
变量(RGBA)减少它们的位深度并将结果打包在一个 0-1 中var4
。这将存储为 8 位(每通道)纹理,然后解压缩。我意识到这会导致质量损失,但这是可以接受的。
所以在这个例子中:
RGBA 8 位
->
缩减为 RGBA 2 位
->
,与 3 个其他 RGBA 2 位一起var4s
->
保存为单个 8 位 RGBA 纹理,
->
解压缩后重新压缩为 4 x RGBA 2 位变量
->
,缩小为原始质量的降低版本。
我意识到我不能在 GLSL 中进行位移,所以我必须做一些乘法的集合,它的神奇组合到目前为止让我无法理解!其他人谈到了包装浮动,vec4s
但我的问题有点不同。
谢谢!
math - 2/表设计问题的聚合和分解
我有一些数据,并试图跟踪工作文书工作的各种问题。数据看起来像这样:
在 N 个类别的文书工作、M 个不同的 ID 或行以及每个字段中 X 个不同的可能响应中,我试图确定哪个 ID 的响应以及哪个类别的文书工作在哪里。
我想到了两种不同的桌子设计。
两列设计:
带有相应的代码库
因此,我们只需查看文书工作栏中的任何数字即可知道该期间不同文书工作的问题。在两列设计中,错误将是:
两列设计:
这种设计的问题是: 1) 很容易将数字放入文书工作栏中 - 有人需要查看给定时期的所有文书工作,并注意每件作品的各种问题或缺乏问题文书工作。一旦找到这些问题,就会为每个问题分配一个数字,然后将这些数字相加以找到一个总数字,该数字封装了该给定时期内的所有问题。但是,我不知道如何从这些特定数字中进行文本输出,并且我不想强行列出所有潜在文本输出的列表,因为有太多不同的可能性。它可以缩小一些,因为你不能有一份缺少签名的完整文书工作,但这听起来有太多的可能性 所以我的问题是:如果我得到数字 257,我怎么知道 257 真的是 256+1?我是否需要,或者我是否让这变得不必要地复杂?
或者,我想到的另一种方法是将所有错误包含在一个更二进制的变量中。所以代替上面列出的错误代码,它看起来像:
许多列
所以表格将是:
然后,当我试图对文书工作的各种问题进行报告时,我需要做的就是有一个查找函数来计算文书工作 1 列中有多少数字 2 的实例,并找到相应的 ID它。然后我会将这些信息提供给我的同事和老板,然后他们会反过来知道这个人的这份文件存在问题;但他们不知道具体是什么问题,需要依靠自己对书籍的第一手知识。
这种设计的问题在于,它隐含地要求人们与我的管理书籍的同事核对,以找出文书工作的问题,而我参与这项工作的全部目的是帮助她完成工作并利用计算机的力量来帮助她完成任务。所以第二种设计似乎并没有利用计算机技术的全部潜力来帮助完成任务。
因此,除了之前提出的问题,我完全欢迎在这件事上提出任何问题、观点或方向。如果您有替代的桌子设计,我也欢迎。
如果这篇文章违反了任何关于不直接的stackoverflow政策,我提前道歉,我尽量让它尽可能直接。
c# - 查找包含所有可能的 3x3 位模式的 NxM 网格
更新:这被称为 de Brujin 圆环,但我仍然需要在 C# 中找出一个简单的算法。
http://en.wikipedia.org/wiki/De_Bruijn_torus
http://datagenetics.com/blog/october22013/index.html
我需要尽可能密集地组合 3x3 位网格的所有值。通过 3x3 位网格,我的意思是 3x3 网格,其中每个位置有点类似于这个问题中的打孔概念:
3x3 位网格示例:
目标
我想打包所有 512(实际上是 256,因为中心位始终打开)可能的值,以便它们在单个 NxM 网格中重叠。
不完整的例子:
此示例将大约 25 个可能值打包到 7x7 网格中。
已经知道的事情:
- 有 2^9 (512) 个唯一值。
- 我只关心 2^8 (256) 个值,因为我需要始终打开中心位。
尝试
我手动尝试了许多不同的技术,但无法提出一个简单的算法。
所以,我想编写一个 C# 程序来创建它,但我也没有看到一个简单的方法。
在我看来,甚至没有明显的蛮力方法。似乎任何蛮力尝试都会接近 512!在最坏的情况下组合。
观察
每条边只有 8 个可能的值。
目的
这实际上将用于基于 2d 瓦片的游戏。
游戏有 N 个可能的地块。鉴于地面可以在任何情况下出现,设计师需要一种方式来表达在任何给定情况下应该选择哪个瓷砖。
包含所有可能情况的紧凑网格是指定在每种情况下使用哪个图块并消除所有冗余的最有效方法。
更新
例子
以上是允许表达 4 种情况的基本模式,我将对其进行修改以使用其他 ascii 值来表示应在每种情况下使用的结果:
其中 A、G、H 各自代表应用于每种情况的特定模式。
因此,如果找到以下模式:
这与上面导致“A”的模式匹配,因此在这种情况下将使用“A”。
目的是详尽地表达每种可能的情况会导致什么。
在实践中
我能够尝试这个,发现结果太随机了,无法很好地实现目标。作为人类,很难在每种情况下选择正确的价值观,因为或者混乱。类似模式的手动分组仍然效果更好。
c - 如何覆盖 C 编译器将结构中的字大小变量对齐到字边界
我有一个指定如下的结构
- 成员 1,16 位
- 成员 2,32 位
- 成员 3,32 位
我将从文件中读取。我想直接从文件中读取到结构中。
问题是 C 编译器会将变量 m1、m2 和 m3 与 32 位的字边界对齐,因为我正在为以下结构声明使用 ARM Cortex M3:
直接从文件中读取会在 m2 和 m3 中放入错误的值,并且还会读取 2 个额外字节。
我已经破解了,目前正在使用以下效果很好:
然而,这看起来像一个非常肮脏的黑客。我不禁希望有一种更简洁的方法来强制编译器将 m2 和 m3 的一半放在不同的词中,但它可能不是最理想的。
我正在使用 arm-none-eabi-gcc。我知道位打包,但无法解决此优化问题。
编辑:原来我对位打包知之甚少:D