【发布时间】:2018-03-14 03:41:20
【问题描述】:
根据我在 stackoverflow 上搜索和发现的内容,我发现一个字符始终是 1 个字节。这是肯定的。但是,我也看到它可能不是 8 位(它可能更大,参见 CHAR_BITS)。这是否意味着如果在某些假设的架构中是 10 位,那么 1 字节 = 10 位?这是否意味着如果实现默认整数为 4 个字节,那么 int 的大小将为 40 位?尽管 Internet 上的线程数量惊人,但我对所有这些位字节的变化感到有些怀疑。
【问题讨论】:
-
为什么知道“字节”/
char是否为 8、9、16 等位很重要?通常该问题的答案指出位宽并不重要,但 type 很重要。如果代码需要 8 位,请使用(u)int8_t。如果代码需要32位,使用(u)int32_t,如果代码至少需要32位,使用(u)int_least32_t.或long等。如果代码需要知道int的范围,使用INT_MIN/INT_MAX。 -
与其说是“为什么重要”的问题,不如说是在我继续前进之前真正理解一切的问题,我的强迫症阻止我这样做。但是,是的,我明白为什么我可以简单地使用这些 typedef。根据我现在的理解,C 标准将“字节”视为字符大小的东西。现在按照惯例,这可能是 8 位,但也可能更多。无论如何,为了术语,C 将此大小计为一个字节,而通常我们将一个字节定义为 8 位。希望我明白了。
-
BITD, C 在各种架构中开创了一个中间地带。将一个公司的正常“字节”和另一个平台的不同大小的“字节”取为“字节”/
char至少8位,取决于平台,是最小的单位。这种创新产生了遵循松散定义的可移植代码。今天,市场可接受的架构越来越紧缩。如果想要非常严格的编码定义,C 不是最佳选择。如果一个人想要一种能够适应创新但又不超越过去的语言,那么 C - warts (many) and all - 是一个长期的好选择。