【问题标题】:For a 16-bit integer variable, can you assign the variable with an integer value of 72368?对于一个 16 位的整型变量,你能给变量赋值 72368 吗?
【发布时间】:2021-09-14 18:46:00
【问题描述】:

您能否详细解释一下?

【问题讨论】:

  • 编译器将截断该值以使其适合,但存储的值不会是 72368。

标签: c integer


【解决方案1】:

您可以尝试,但如果分配成功,它将不会存储您的整个原始数字,因为准确表示它需要超过 16 位。

16 位整数中的最高位是 215 位。 2 的 15 次方是 32768。将 16 位设置为全 1 将产生 65535 (32768 * 2 - 1),如果整数是无符号的,那么这是您可以可靠分配的最高数字。

无论如何,这很容易测试:

#include <stdio.h>

int main(void) {
  unsigned short i = 72368;
  printf("%d\n", i); // 6832
  return 0;
}

请注意,72368 被解释为int,并且隐式转换为unsigned short,尽管编译器会警告您。 Try it online.

【讨论】:

  • 谢谢你 :) 的帮助。我也在网上试过。它有效,你的解释对我来说很清楚。
  • 在这里使用uint16_t 更好吗?
  • @klutt:这只是说明性代码,而不是生产代码,我想你会遇到与uint16_t 相同的问题。
  • 是的,我明白这只是说明性的。但我仍然认为它更好,因为 1) unsigned short 具有最小宽度但不是 exakt 宽度,并且 2) 它会使您的示例更加清晰。但我不知道。只是一个想法。
【解决方案2】:

不,因为你可以用 16 位编码的最大值是 65535

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2017-08-04
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多