У меня есть переменная UINT64. При запуске он инициализируется до 0xF. Теперь я хочу, чтобы это изменилось во время выполнения в зависимости от некоторого ввода. Его значение будет увеличиваться во время выполнения. Но я хочу, чтобы он изменился с F на FF, с FF на FFF, к нему должен быть добавлен один F.
Теперь вот мой код.
UINT64 mapFileSize = 0xF;
while (mapFileSize < someUserInput)
// add one F to mapFileSize;
Что я должен написать там. Я пытаюсь левый оператор смещения, но он не работает нормально.
mapFileSize <<= 1;
Я делаю это, но это не дает мне желаемого результата.
Более краткий способ сделать это:
mapFileSize |= (mapFileSize << 4);
Или, если вы не можете гарантировать, что исходное значение всегда заканчивается 0xf:
mapFileSize = (mapFileSize << 4) | 0x0f;
карта leftshiftFileSize 4 бит
а затем или mapFileSize с 0xF
mapFileSize = mapFileSize <<4;
mapFileSize = mapFileSize | 0xF;
То, что вы описываете, не является результатом одной смены. <<
просто сдвигайте биты, сдвигая нули по мере необходимости, но вам нужно будет сдвигать в битах, чего просто не делает оператор левого сдвига Си.
Вам нужно сначала сдвинуть, а затем установить младшие четыре бита для всех:
mapFileSize <<= 4; /* Shift to the left one hexadecimal digit. */
mapFileSize |= 0xf; /* Make sure rightmost digit is f. */
$ F $, сдвинутый влево на четыре, равен $ 0F0 $, а не $ FF $. Итак, вам нужно:
mapFileSize <<= 4 ;
mapFileSize += 0x0F ;