0

我正在使用 OKI 431 微控制器。它可以与安装了适当软件的PC进行通信。一个 EEPROM 连接在 micro 的 I2C 总线上,用作永久存储器。PC 软件可以读取和写入该 EEPROM。

考虑两个数字,B 和 C,每个都是两字节整数。B 对 PC 软件和 micro 来说都是已知的,并且是一个常数。C 将是一个非常接近 B 的数字,因此 BC 将适合一个有符号的 8 位整数。经过一些测试,合适的 C 值将由 PC 确定并存储到 micro 的 EEPROM 中以供以后使用。

现在 micro 可以通过两种方式存储 C:

  • 微可以存储two byte代表C的整体
  • micro可以将BC存储为有one byte符号整数,以后可以从B和BC推导出C

我认为负数的二进制补码表示现在已被硬件制造商普遍接受。我个人仍然不喜欢将负数存储在将由两种不同架构访问的存储介质中,因为负数可以用不同的方式表示。供您参考,431 还使用二进制补码。

我是否应该摆脱负数可以以不同方式表示的头痛并接受one byte我的其他团队成员建议的解决方案?或者我应该坚持two byte解决方案的决定,因为我不需要处理负数?你更喜欢哪一个,为什么?

4

2 回答 2

2

我曾经工作的一个古老的 FORTRAN 应用程序用于将某些字段的值存储为带有隐含负偏移量的正整数。有 12 位可用于存储数字,因此我们将在存储之前将 1024 添加到该值,并在检索后减去它。这将允许我们使用(外部)存储器中的正数存储 -1024 到 1023 范围内的数字,范围为 0 到 2047。

几乎不优雅,但非常简单。您实际上是在代码中进行符号位处理。

于 2010-04-24T16:27:45.390 回答
2

这对您的应用程序非常具体,除非我遗漏了某些东西,否则似乎不会对以这种或另一种方式进行操作产生任何外部影响。
我的建议是简单地选择一个并使用它。
既然你的队友都在建议一种方式,而且真的没有区别,那么和团队一起去并不是一个坏的解决方案。

于 2010-04-24T16:32:46.977 回答