首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >uint8_t≠未签名字符是什么时候?

uint8_t≠未签名字符是什么时候?
EN

Stack Overflow用户
提问于 2013-04-22 01:45:42
回答 3查看 31.6K关注 0票数 65

根据C和C++,CHAR_BIT >= 8

但是,无论何时CHAR_BIT > 8uint8_t都不能表示为8位。

它必须更大,因为CHAR_BIT是系统上任何数据类型的最小位数。

在哪种系统上,uint8_t可以合法地定义为unsigned char以外的类型?

(如果C和C++的答案不同,那么我想知道两者。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-22 02:17:49

如果存在,uint8_t必须始终具有与unsigned char相同的宽度。但是,它不一定是相同的类型;它可能是一个不同的扩展整数类型。它也不需要具有与unsigned char相同的表示形式;例如,可以用相反的顺序来解释比特。这是一个愚蠢的例子,但对于int8_t来说更有意义,在这里,signed char可能是1,补码或符号大小,而int8_t被要求是两个补码。

uint8_t使用非字符扩展整数类型的另一个“优势”是C的混叠规则。允许字符类型别名任何东西,这会阻止编译器对同时使用字符指针和指向其他类型的指针的函数进行严格优化,除非restrict关键字应用得很好。然而,即使uint8_t具有与unsigned char完全相同的大小和表示形式,如果实现使其成为一个不同的非字符类型,则别名规则将不适用于它,编译器可以假设类型为uint8_tint的对象永远不能别名。

票数 63
EN

Stack Overflow用户

发布于 2013-04-22 01:54:21

在哪种系统上,uint8_t可以合法地定义为unsigned char以外的类型?

总之,uint8_t只能在CHAR_BIT为8的系统上合法定义,它是一个可寻址的单元,只有8位值,没有填充位。

详细地说,CHAR_BIT定义最小可寻址单元的宽度,而uint8_t不能有填充位;它只能存在于最小可寻址单元正好8位宽的情况下。如果CHAR_BIT为8,则可以为没有填充位的任何8位无符号整数类型定义类型定义。

以下是C11标准草案(n1570.pdf)的内容:

5.2.4.2.1整数类型的大小(1)下面给出的值应替换为适合于#if预处理指令中使用的常量表达式。..。它们的实现定义值应等于或大于所显示的值(绝对值),并具有相同的符号。 -非位字段(字节) CHAR_BIT 8的最小对象的位数

因此,最小的对象必须准确地包含CHAR_BIT位。

6.5.3.4规模和_Alignof运算符 ..。 4当对具有char、un符号char或已签名char (或其限定版本)的操作数应用sizeof时,结果为1。

因此,这些是(一些)最小的可寻址单位。显然,int8_tuint8_t也可以被认为是最小的可寻址单元,只要它们存在。

7.20.1.1精确宽度整数类型 1类型胡枝子名称intN_t指定一个带符号整数类型,其宽度为N,没有填充位,并指定两个补码表示形式。因此,int8_t表示这种宽度正好为8位的带符号整数类型。 2类型胡枝子名称uintN_t指定宽度为N且没有填充位的无符号整数类型。因此,uint24_t表示这种宽度正好为24位的无符号整数类型。 3这些类型是可选的。但是,如果实现提供宽度为8、16、32或64位的整数类型,没有填充位,并且(对于有符号类型)具有两个补码表示的整数类型,则它将定义相应的类型类型。

我的重点是“--这些类型是可选的”。我希望这是有帮助的:)

票数 33
EN

Stack Overflow用户

发布于 2013-04-24 22:30:29

到目前为止还没有人提到过这样的可能性:如果CHAR_BIT==8和不合格的char是无符号的(在某些ABI中是这样的),那么uint8_t可能是char (而不是unsigned char )的typedef。这至少是因为它影响了过载选择(以及它的邪恶孪生,名称损坏),也就是说,如果您的作用域同时有foo(char)foo(unsigned char),那么使用uint8_t类型的参数调用foo会更倾向于在这样的系统上使用foo(char)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16138237

复制
相关文章

相似问题

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