2

我有 UINT64 变量。在开始时,它被初始化为 0xF。现在我希望根据一些输入在运行时改变它。它的价值将在运行时增加。但我想要的是它应该从 F 变为 FF,从 FF 变为 FFF,应该附加一个 F。

现在这是我的代码。

UINT64 mapFileSize = 0xF;
while (mapFileSize < someUserInput)
    // add one F to mapFileSize;

我应该在那里写什么。我正在尝试左移运算符,但它不能正常工作。

mapFileSize <<= 1;

我正在这样做,但这并没有给我想要的结果。

4

4 回答 4

5

左移 mapFileSize 4 位

然后或带有 0xF 的 mapFileSize

 mapFileSize = mapFileSize  <<4;
 mapFileSize = mapFileSize  | 0xF;
于 2012-11-27T09:13:28.687 回答
4

你所描述的不是单一转变的结果。A<<只是移动位,根据需要移入零,但您需要移入一个,这是 C 的左移运算符不做的事情。

您需要先移位,然后将最低四位设置为全1:

mapFileSize <<= 4;  /* Shift to the left one hexadecimal digit. */
mapFileSize |= 0xf; /* Make sure rightmost digit is f. */
于 2012-11-27T09:13:47.007 回答
3

一种更简洁的方法:

mapFileSize |= (mapFileSize << 4);

或者如果你不能保证原始值总是以 0xf 结尾:

mapFileSize = (mapFileSize << 4) | 0x0f;
于 2012-11-27T09:14:55.010 回答
1

$F$ 左移四位是 $0F0$,而不是 $FF$。所以你需要:

mapFileSize <<= 4 ;
mapFileSize += 0x0F ;
于 2012-11-27T09:13:25.943 回答