编辑:前提是错误的,感谢其他用户的评论,我意识到我下面描述的系统无法工作。但是我想知道,是否有一个系统,将工作为存储标记在一个变量内的不同位置,以便它可以同时用于存储高精度的小值或低精度的大值?
原始问题:
在C11和c++ 11中,我想把两个单位标志塞进一个size_t
变量中,我同时用它来存储一个不相关的值。由于该值通常较低,我的想法是使用两个最有效的位来存储标志,除非第三位被设置,在这种情况下,我将标志存储在两个最不有效的位中。这样,如果值在通常的范围内,它的精度可以是1,如果值很大,它的精度可以是4。我可以通过检查第三位有效位来确定标志存储在哪里以及如何解释该值。
与uintN_t
类型不同,标准似乎不能保证size_t没有填充位。我不擅长玩弄小把戏。在不太可能的情况下,在size_t
中使用填充位的系统,我需要实现这个系统的按位操作会导致未定义的行为吗?
为了满足好奇,我不想将标志存储在单独的char
中,因为内存使用是优先级,这样做会在大多数系统上通过max_align_t
扩大包含结构(因为结构对齐/填充)。
如果系统在
size_t
中使用填充位,我需要实现这个系统的逐位操作会产生什么结果未定义的行为?
我推断您担心的是您可能会无意中尝试拨弄填充位。您不需要担心这个问题,因为按位操作是根据值定义的,而不是根据这些值的表示细节定义的。