位操作:在一组位的最左角添加一个位

时间:2018-11-24 22:45:53

标签: bit-manipulation byte bitwise-operators bit bit-shift

因此,假设我按以下顺序设置了一组位:

00101显然等于5

是否可以在这些位的集合的左上角添加一个1 100101,等于37。(使用位操作)

非常感谢您!

1 个答案:

答案 0 :(得分:0)

 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