2012-02-06 34 views
0

我发现一个类型的值为INTEGER的变量(0 ... 2 - 1)。一个让代码决定放置一个类型为uint32_t var的变量的人;并把这个结果与0XFFFFFFINTEGER(0..2 ** 24 - 1)是否是uint32_t&0xFFFFFF?

请问这是怎么uint32_t的& OxFFFFFF能够处理整数的值(0 ... 2 - 1)?

据我了解,有屏蔽0XFFFFFF您做出值全部为正(或?),但如何做这件事的工作,我想我错过这里的概念。

+0

这将有助于如果你说你正在谈论哪种语言... – 2012-02-06 11:45:59

+0

@JonSkeet:它在C – heike 2012-02-06 11:47:36

+1

什么是“INTEGER(0 ... 2(24) - 1))”意思/站立对于? – 2012-02-06 11:48:23

回答

2

0xffffff掩蔽只可以确保,它永远不会存储的值是0..2^24-1范围之外。除了较低的24位以外的任何内容都将被丢弃。

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

1

2**24-116777215(在这里,我用**来指数)。

0xFFFFFF16777215

换句话说,它们是写相同的值的方法有两种。

当您AND东西0xFFFFFF,你保持24个最低有效位,并将其余设置为零。

+0

由于有些人似乎无法接受它们是相同的,所以“保留最低有效24位”与“减少模2 ** 24”(假设为正值或无符号值)是相同的。 – 2012-02-06 14:34:58