Битовая манипуляция: добавьте бит в самый левый угол набора битов - PullRequest
0 голосов
/ 25 ноября 2018

Итак, допустим, у меня был набор битов в следующем порядке:

00101, который, очевидно, будет равен 5

Можно ли добавить 1 в левом углунаборы битов, так что это будет 100101, что будет равно 37. (Использование битовой манипуляции)

Большое спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018
 00101 which obviously would be equal to 5
100101 which would be equal to 37

Чтобы решить эту проблему, вам понадобятся два значения:

  1. Значение битов, приведенное выше, здесь называется val
  2. Количество битов в значении (потому что ононе является обычным значением, как 8,16, ...), здесь с именем len

Тогда вы можете получить окончательное значение, используя следующую формулу:

result = val | (1 << len)

В вашем случае это будет

result = 00101b | (1 << 5d) = 00101b | 100000b = 100101b

В сборке x86 (синтаксис Intel MASM) это можно сделать следующим образом

mov eax, val   ; EAX = 00000101
mov ecx, len   ; ECX = 5
mov edx, 1     ; EDX = 00000001
shl edx, cl    ; EDX = 00100000
or  eax, edx   ; EAX = 00100101
...