【问题标题】:Range of char type values in CC中char类型值的范围
【发布时间】:2011-01-10 14:24:27
【问题描述】:

是否可以将多个字节值存储到 char 类型中?

例如char c;,我想将 1000 存储在 c 中。可以这样做吗?

【问题讨论】:

  • 你为什么要使用charshort int 会给你 2 个字节,而且你不会轻易将 1000 存储在更小的空间中。

标签: c


【解决方案1】:

从技术上讲,不,您不能将超过一个字节的值存储到 char 类型。在 C 中,char 和字节大小相同,但不一定限于 8 位。许多标准机构倾向于使用术语“八位字节”来表示精确 8 位的值。

如果您查看limits.h 内部(从内存中),您会看到CHAR_BIT 符号(以及其他符号)告诉您char 实际使用了多少位,如果它足够大,那么,是的,它可以存储值 1000。

【讨论】:

  • 然而,在几乎所有桌面上,字符正好是 8 位大,并且考虑代码中异常字节大小的可能性可能是矫枉过正。
  • @user168715 : 我们中的一些人在比几乎所有桌面集更大的宇宙中工作:-)
  • @user168715:我认为这是支持它付出多少努力的问题。如果只是输入CHAR_BIT 而不是8,我会这样做。如果支持不同大小的字节实际上会浪费大量精力,我会以某种方式(可能只是在文档中)断言 CHAR_BIT 必须为 8 并继续我的生活。
  • POSIX 和 Windows(除了 DSP 之外,它们基本上都适用;即使是现在的大多数嵌入式系统)都需要CHAR_BIT==8,任何与外界和互联网通信的远程便携方式也是如此,所以我看到支持非八位字节大小的价值真的很小。
  • @paxdiablo,vast 令人难以置信的绝大多数系统都有 8 位字符类型。 :-)
【解决方案2】:

您可以在 C 类型中存储的值的范围取决于它的大小,而这不是由 C 指定的,它取决于体系结构。 char 类型至少有 8 位。通常(几乎普遍)这也是它的最大值(您可以在limits.h 中查看它)。 因此,在 char 中,您将能够存储从 -128 到 127,或从 0 到 255(有符号或无符号)。

【讨论】:

    【解决方案3】:

    C 中char 的最小大小为 8 位,不足以容纳超过 256 个值。它可能在特定实现中更广泛,例如字可寻址架构,但您不应该依赖它。

    【讨论】:

    • +1 用于回忆有诸如字寻址架构之类的东西 :-)
    【解决方案4】:

    包含limits.h 并检查CHAR_MAX 的值。

    【讨论】:

      【解决方案5】:

      可能不会。 C 标准要求 char 至少可以保存 8 位,因此您不能依赖于能够在 char 中便携地存储超过 8 位的值。

      (* 在当今最常用的系统中,字符是 8 位)。

      【讨论】:

        【解决方案6】:

        Char 的宽度取决于系统。但是假设您使用的东西与 C99 相当兼容,您应该可以访问头文件 stdint.h,它定义了 intN_t 和 uintN_t 格式的类型,其中 N=8、16、32、64。这些保证至少有 N 位宽。因此,如果您想确定具有一定位数的类型(无论系统如何),那么这些就是您想要的。

        例子:

        #include <stdint.h>
        
        uint32_t foo; /* Unsigned, 32 bits */
        int16_t bar;  /* Signed, 16 bits */
        

        【讨论】:

        • 你应该记住,只有当实现的类型符合它们的规范时才需要这些类型(诚然,这很有可能)。例如,如果没有 8 位类型,uint8_t 将不存在。如果它们确实存在,则保证它们是完全 N 位宽,而不是“至少”。 “至少”类型是int_leastN_t。如果你解决了这个问题,我会给你一个提升:-)
        猜你喜欢
        • 2012-04-27
        • 2020-10-07
        • 1970-01-01
        • 2012-04-17
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        相关资源
        最近更新 更多