0

在此处提供的 H264(mpeg4 第 10 部分 AVC)规范中,我们可以阅读第 59 页上的以下内容(为了明确关于 SO 的问题,进行了一些简化):

for(i8x8 = 0; i8x8 < 4; i8x8++) 
  for(i4x4 = 0; i4x4 < 4; i4x4++) 
     if(CodedBlockPatternLuma & (1 << i8x8))
       doSomething()

我想知道如何解释if声明的内容。查看其他实现,似乎要做的测试是检查它是否为 0。似乎更有意义,否则条件只能评估为truewhen i8x8is 0。你怎么理解?

4

1 回答 1

1

它正在测试是否设置了特定位。1 << i8x8 取一个“1”位并将其左移可变数量的空格,然后将其 &'ing 到 CodedBlockPatternLuma 以查看是否设置了位。如果模式为 10101010 且 i8x8 为 2,则模式与 100 进行与运算,因此 10101010 & 00000100 = 00000000,该位未设置。如果模式是 01010101,并且与 00000100 进行与运算,那么该位将被设置,并且它会是真的。

于 2013-10-07T16:43:05.950 回答