Конвертировать F в FF используя левый оператор смещения

У меня есть переменная UINT64. При запуске он инициализируется до 0xF. Теперь я хочу, чтобы это изменилось во время выполнения в зависимости от некоторого ввода. Его значение будет увеличиваться во время выполнения. Но я хочу, чтобы он изменился с F на FF, с FF на FFF, к нему должен быть добавлен один F.

Теперь вот мой код.

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

Что я должен написать там. Я пытаюсь левый оператор смещения, но он не работает нормально.

mapFileSize <<= 1;

Я делаю это, но это не дает мне желаемого результата.

2

Решение

Более краткий способ сделать это:

mapFileSize |= (mapFileSize << 4);

Или, если вы не можете гарантировать, что исходное значение всегда заканчивается 0xf:

mapFileSize = (mapFileSize << 4) | 0x0f;
3

Другие решения

карта leftshiftFileSize 4 бит

а затем или mapFileSize с 0xF

 mapFileSize = mapFileSize  <<4;
mapFileSize = mapFileSize  | 0xF;
5

То, что вы описываете, не является результатом одной смены. << просто сдвигайте биты, сдвигая нули по мере необходимости, но вам нужно будет сдвигать в битах, чего просто не делает оператор левого сдвига Си.

Вам нужно сначала сдвинуть, а затем установить младшие четыре бита для всех:

mapFileSize <<= 4;  /* Shift to the left one hexadecimal digit. */
mapFileSize |= 0xf; /* Make sure rightmost digit is f. */
4

$ F $, сдвинутый влево на четыре, равен $ 0F0 $, а не $ FF $. Итак, вам нужно:

mapFileSize <<= 4 ;
mapFileSize += 0x0F ;
1