【问题标题】:How to represent a binary field in programming language?如何在编程语言中表示二进制字段?
【发布时间】:2015-12-14 07:56:05
【问题描述】:

我正在研究我的椭圆曲线密码学项目,该项目需要对二进制字段进行编程。它包括基本操作,如加法、乘法、求逆等 w.r.t。一个不可约的二元多项式。

我正在寻找一种将这些二进制多项式存储在程序中的方法。我正在研究 C 和 C++ 编程语言(使用 gmp 库),所以我首先想到的是使用结构和位域。但它们不是动态的,不能保存任意长的多项式。使用 C++ Vector STL 是可行的,但效率不高,因为它将单个位存储在 8 位或更多位的单个字中。

有没有什么有效的表达方式?

【问题讨论】:

  • std::vector 使用 1 位内存进行 1 位表示
  • 你最好的选择可能是boost::dynamic_bitset。
  • 为什么投反对票?这不是一个完全合理的问题吗? Stackoverflow 似乎越来越没用了……
  • 请选择一种语言,你不能同时用两种不同的语言编程。C 或 C++ 会给出不同的答案。
  • @Lundin:但他确实使用两种语言! gmp 是一个 C 库,他的应用程序似乎是用 C++ 编写的。 [编辑:删除蛇]

标签: c++ polynomial-math


【解决方案1】:

将信息按位存储在数组中是无效的。如果我是你,我会将位信息存储在一个大的 UNSIGNED LONG INTEGER 中,并编写一个函数,该函数可以将这些位放入和取出这个整数值簇。这种存储位信息的方式可以将您的求解速度提高 64 倍!

【讨论】:

  • 你是对的。但这不是动态的,并且将数据大小限制为 64 位。
  • 使用动态整数数组作为底层存储。访问功能将涵盖这一点。添加/删除函数将使用realloc() 扩大和缩小数组。 @Gaurav
  • @Gaurav - 我的理解是不可约二元多项式的大小是固定的,只有可变长度的数据,假设这是真的,那么大部分时间你都在使用固定长度变量,可以是 32 位或 64 位无符号整数数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2015-06-04
  • 2017-04-07
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
相关资源
最近更新 更多