<cstdint>
(<stdint.h>
)标头定义了几种整数类型,它们的名称遵循以下模式:intN_t
,其中N
是位数,而不是字节。< / p>
鉴于字节未严格定义为8位长度,为什么这些类型不能定义为,例如int1_t
而不是int8_t
?这不是更合适,因为它考虑了具有不同长度字节的机器吗?
答案 0 :(得分:6)
在没有这些尺寸的机器上,未定义类型。也就是说,如果您的机器没有8位字节,则int8_t
将不可用。但是,您仍然可以使用最少的版本,例如int_least16_t
。
人们怀疑的原因是,如果你想要一个精确的大小,你通常需要一个比特大小而不是一个抽象的字节大小。例如,所有互联网协议都处理8位字节,因此您需要具有8位,无论是否为本机字节大小。
This answer也非常有用。
答案 1 :(得分:5)
int32_t
可以是4字节8位/字节类型,也可以是2字节16位/字节类型,也可以是1字节32-每字节位类型。您可以存储在其中的值无关紧要。
答案 2 :(得分:3)
使用这些类型的想法是明确可以存储到变量中的位数。正如您所指出的,不同的体系结构可能具有不同的字节大小,因此具有字节数并不能保证变量可以处理的位数。