【问题标题】:Is there a way to specify int size in C?有没有办法在 C 中指定 int 大小?
【发布时间】:2015-10-11 23:12:25
【问题描述】:

我正在尝试检查一些关于 2 的补码加法、减法等溢出的作业答案,我想知道我是否可以指定数据类型的大小。例如,如果我想看看当我尝试将 -128 或 -256 分配给 7 位无符号整数时会发生什么。

【问题讨论】:

  • 我是个编程新手,我可以将 chars 设置为 int 值并且它们会保留吗? unsigned char 也不是 7 位的吗?
  • char 具有可用的最小尺寸。它是 8 位或更多位。
  • unsigned char x = 3; 确实有效。 C 很乐意这样做。
  • @EOF "如果你想知道 C 是如何工作的,请阅读标准" 标准对于新程序员来说是难以理解的,当然不是你开始的地方试图围绕命令式编码的基础知识。

标签: c types


【解决方案1】:

在进一步阅读中,我发现您想要不正常的位大小,例如 7 位和 9 位等。 您可以使用位域来实现这一点

struct bits9
{
    int x : 9;
};

现在您可以使用这种类型bits9,其中有一个字段x,其大小仅为9 位。

struct bits9    myValue;

myValue.x = 123;

【讨论】:

    【解决方案2】:

    对于任意大小的值,您可以在结构中使用bitfields。例如对于 7 位值:

    struct something {
       unsigned char field:7;
       unsigned char padding:1;
    };
    struct something value;
    value.field = -128;
    

    【讨论】:

      【解决方案3】:

      您拥有的最小大小是 char,它是一个 8 位整数。你可以有无符号和有符号的字符。看看 stdint.h 头文件。它以独立于平台的方式为您定义了一个 int 类型。也没有 7 位整数这样的东西。

      【讨论】:

      • char 至少 8位。
      • 嗯 7 位是我的家庭作业问题的假设大小。当您将某些正值和负值放入 7、8 和 9 位处理器时,它会要求确定是否存在溢出。我试图用 C 检查我的答案,但我想我做不到。
      【解决方案4】:

      使用内置类型,您可以:

       char      value1;      // 8 bits
       short     value2;      // 16 bits
       long      value3;      // 32 bits
       long long value4;      // 64 bits
      

      请注意,Windows 上的 Microsoft 编译器就是这种情况。除了“这个必须至少和另一个一样大”等之外,C 标准没有指定确切的宽度。 如果您只关心特定平台,则可以打印出类型的大小,并在弄清楚后使用它们。

      您也可以使用 C99 标准中的 stdint.h。它具有名称中带有宽度的类型以使其清晰

      int8_t    value1;    // 8 bits
      int16_t   value2;    // 16 bits
      int32_t   value3;    // 32 bits
      int64_t   value4;    // 64 bits
      

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 2016-12-08
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 2019-07-02
        • 2017-07-27
        • 2019-08-20
        • 2023-01-19
        相关资源
        最近更新 更多