这是什么意思?

时间:2011-01-29 11:55:08

标签: c

嗨,大家好,你能解释下面的代码在下面的代码中做了什么吗

 if (header->mode > forceMode)
      {
        *rate >>= (header->mode - forceMode); //What does this mean >>=
         *granule_frame_size <<= (header->mode - forceMode); //What does this mean <<=
      }

3 个答案:

答案 0 :(得分:3)

虽然上面的所有答案都是正确的,但您可能仍然无法理解它。您需要了解二进制文件。

想象一下你有表达式

7&lt;&lt; 2

这意味着“将7转换为二进制,然后将所有位转换为2次。”

所以7是00000111

左移两次(并插入零):

00011100

这等于28。

因此,如果变量A为7,B为2,则:

A <<= B;

叶A等于28;

答案 1 :(得分:2)

>>=是右移赋值运算符。 x >>= y相当于x = x >> y(注意@bdonlan在下面指出)。

答案 2 :(得分:2)

<<>>运算符传统上被认为是按位的,因为它们是如何实现的,但就C语言而言,它们是算术运算符(不是按位运算符)相当于乘法和除以2的相应幂。也就是说,x<<y是x * 2 ^ y而x>>y是x / 2 ^ y(带整数截断),其中by ^我的意思是“提升到权力”而不是“xor”。它们仅针对x的正值定义,并且与所有算术运算符一样,如果结果溢出,<<对于带符号的操作数具有未定义的行为。