00101 which obviously would be equal to 5
100101 which would be equal to 37
Чтобы решить эту проблему, вам понадобятся два значения:
- Значение битов, приведенное выше, здесь называется
val
- Количество битов в значении (потому что ононе является обычным значением, как 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