首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了8位字符之外,还有哪些平台可以使用其他字符?

除了8位字符之外,还有哪些平台可以使用其他字符?
EN

Stack Overflow用户
提问于 2010-01-20 08:03:48
回答 13查看 22.5K关注 0票数 142

每隔一段时间,就会有人在网上指出char (aka 'byte') isn't necessarily 8 bits

看起来8位char几乎是通用的。我认为对于主流平台,有必要有一个8位的char,以确保它在市场上的生存能力。

无论是现在还是历史上,哪些平台都使用非8位的char,为什么它们会与“正常”的8位不同?

在编写代码并考虑跨平台支持(例如,对于通用库)时,对于使用非8位char的平台,值得考虑哪些因素

在过去,我遇到过一些‘ve公司的DSP,其char为16位。我认为DSP是一种小众的架构。(话又说回来,当时手工编写的汇编程序轻而易举地击败了现有的C编译器,所以我在那个平台上并没有获得多少使用C的经验。)

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-01-20 09:23:00

在德州仪器的C54x DSP上,char也是16位的,例如在OMAP2中出现的DSP。还有其他具有16位和32位char的DSP。我想我甚至听说过24位DSP,但我不记得是什么了,所以可能是我想象出来的。

另一个考虑因素是POSIX强制使用CHAR_BIT == 8。因此,如果您正在使用POSIX,您可以假定它。如果后来有人需要将您的代码移植到POSIX的近似实现中,恰好有您使用的函数,但char的大小不同,这是他们的厄运。

不过,总的来说,我认为解决这个问题几乎总是比思考它更容易。只需输入CHAR_BIT即可。如果您想要精确的8位类型,请使用int8_t。你的代码将在没有提供实现的情况下编译失败,而不是静默地使用你不想要的大小。至少,如果我遇到了一个我有充分理由假设它的案例,那么我会断言它。

票数 91
EN

Stack Overflow用户

发布于 2010-01-20 08:19:40

在编写代码并考虑跨平台支持(例如,对于通用库)时,对于使用非8位字符的平台,值得考虑哪些因素?

与其说它是“值得考虑的”,不如说它是按规则行事的。例如,在C++中,标准规定所有字节都将具有“至少”8位。如果您的代码假设字节恰好有8位,那么您就违反了标准。

现在这可能看起来很愚蠢--“当然,所有的字节都有8位!”,我听到你说。但许多非常聪明的人依赖于不能保证的假设,然后一切都崩溃了。历史上这样的例子比比皆是。

例如,大多数90年代初的开发人员假设,特定的无操作CPU计时延迟占用固定数量的周期将占用固定数量的时钟时间,因为大多数消费者CPU的功率大致相等。不幸的是,计算机变得非常快。这催生了带有"Turbo“按钮的游戏机的兴起--具有讽刺意味的是,它们的目的是降低计算机的速度,以便使用延时技术的游戏可以以合理的速度玩。

一位评论者问道,在标准中,哪里说char必须至少有8位。它在部分。本节定义CHAR_BIT,即最小可寻址实体中的位数,默认值为8。它还表示:

其实现定义的数值应等于或大于所显示的数值(绝对值),并具有相同的符号。

因此,任何等于或大于8的数字都适合由实现替换到CHAR_BIT中。

票数 39
EN

Stack Overflow用户

发布于 2010-01-20 08:20:48

具有36位架构的机器有9位字节。根据维基百科,machines with 36-bit architectures包括:

IBM

  • Digital Equipment Corporation PDP-6/10

  • IBM

  • 1103/1103A/1105/1100/2200,
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2098149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档