INTEGER(0..2 ** 24 - 1)是uint32_t& 0XFFFFFF?

时间:2012-02-06 11:43:32

标签: c

我发现了一种变量,其值为INTEGER(0 ... 2 24 - 1)。一个让代码决定放置类型为uint32_t var的变量的人;并将结果与​​0xFFFFFF

放在一起

这是怎么回事uint32_t& OxFFFFFF能够处理INTEGER的值(0 ... 2 24 - 1)?

据我所知,通过屏蔽0xFFFFFF,你可以使值全部为正(或?),但这是如何工作的,我想我错过了一个概念。

2 个答案:

答案 0 :(得分:2)

使用0xffffff进行屏蔽只能确保存储的值永远不会超出0..2 ^ 24-1范围。除了低24位之外的任何东西都将被丢弃。

例如,如果您具有值-1并将其屏蔽,则它将以值0xffffff结束。值已更改,但现在它在有效范围内。

答案 1 :(得分:1)

2**24-116777215(在这里,我使用**进行取幂)。

0xFFFFFF也是16777215

换句话说,它们是写出相同价值的两种方式。

当你AND 0xFFFFFF时,你保留了24个最低有效位,并将其余部分设置为零。