【问题标题】:When using signed int, does my value always start from zero?使用有符号整数时,我的值是否总是从零开始?
【发布时间】:2021-10-03 00:07:48
【问题描述】:

我一直在潜入并阅读无尽的互联网论坛和页面,试图找到答案,但没有运气,所以我们在这里。作为参考,我正在使用 A/D 转换器,并且我正在使用插入接地和 5V 的可变电阻器来更改 A/D 转换器的值。因此,当我编写 C 代码时,如果我使用有符号整数——该整数是模拟到挖掘转换的值——该值将自动在零的两侧分割。例如,假设我有一个 8 位整数并且我使用的是有符号整数。因为我使用的是有符号整数,所以当我移动电阻上的雨刷器时,我会自动获得 0 到 +255 之间的任何值,还是应该自动接收到 -128 到 +127 之间的任何值?

【问题讨论】:

    标签: integer signed adc


    【解决方案1】:

    欢迎来到stackoverflow!这似乎是一个您可以轻松测试的小细节。但是,我刚才检查的大多数教程都使用“int”而不是“unsigned int”。 One of the tutorials 说:

    "返回并存储在 x 中的值将是一个从 0 到 1023 的值。Arduino 有一个 10 位 ADC (2^10 = 1024)。我们将这个值存储到 int 中,因为 x 更大( 10 位)比一个字节可以容纳的容量(8 位)。”

    这让我相信这些值将介于 0-X 之间,具体取决于可用的位数。但正如我所说,这很容易测试。

    【讨论】:

    • 我已经更改了我的代码,看看我是否使用 int(unsigned int) 或有符号 int 是否有所不同,无论哪种方式我都得到相同的值,即从 0-X 的任何地方如你所说。假设它是一个 10 位 ADC,我希望值在 -512 到 +511 之间,我需要为此编写额外的代码还是应该使用带符号的 int 来实现这一点而无需任何额外的代码?
    【解决方案2】:

    让我首先说明这一点, 一个 8 位整数包含 8 位。 2 8 是 256,所以一个 8 位整数可以容纳 256 个可能的值。 -128 到 127 之间有 256 个可能的值。

    因此,您应该期望的值范围是 -128 到 127,而不是 0 到 255

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2023-04-08
      • 1970-01-01
      • 2020-05-01
      • 2016-02-08
      • 1970-01-01
      • 2022-12-25
      • 1970-01-01
      • 2021-08-21
      相关资源
      最近更新 更多