在H264(mpeg4第10部分AVC)规范here中,我们可以阅读第59页的以下内容(为了清楚地解决SO问题,稍微简化了一下):
for(i8x8 = 0; i8x8 < 4; i8x8++)
for(i4x4 = 0; i4x4 < 4; i4x4++)
if(CodedBlockPatternLuma & (1 << i8x8))
doSomething()
我想知道如何解释if
语句的内容。看看其他实现,似乎要做的测试是检查它是否为0。它似乎更有意义,否则当true
为i8x8
时,条件只能评估为0
。你是怎么理解的?
答案 0 :(得分:1)
正在测试是否设置了特定位。 1&lt;&lt;&lt; i8x8取一个“1”位并将其移位可变数量的空格,然后将其移至CodedBlockPatternLuma以查看是否设置了位。如果模式是10101010且i8x8是2,则模式与100进行AND运算,因此10101010&amp; 00000100 = 00000000,该位未设置。 如果pattern为01010101,并且与00000100进行AND运算,那么该位将被设置,这将是真的。