代码之家  ›  专栏  ›  技术社区  ›  Dark Star1

在这个位移操作中正在做什么?

  •  1
  • Dark Star1  · 技术社区  · 15 年前
    (INBuffer[3] << 8) + INBuffer[2]
    

    这实质上是将inbuffer[3]中的位移入inbuffer[2]还是将[3]中的位置零,然后添加到[2]中?

    2 回复  |  直到 15 年前
        1
  •  10
  •   Marius    15 年前

    这是从两个8位值中生成16位值的简单方法。

    INBuffer[3] = 0b01001011;
    INBuffer[2] = 0b00001001;
    
    INBuffer[3]<<8 // 0b0100101100000000;
    (INBuffer[3]<<8) + INBuffer[2] // 0b0100101100001001
    

    通常这表示为

    (INBuffer[3]<<8) | INBuffer[2];
    
        2
  •  6
  •   sharptooth    15 年前

    这取决于最可能计算的语言

    InBuffer[3] * 256 + InBuffer[2]
    

    或者(这很可能是相同的,取决于语言)将两个字节打包成一个16位的字。