嗨,大家好,你能解释下面的代码在下面的代码中做了什么吗
if (header->mode > forceMode)
{
*rate >>= (header->mode - forceMode); //What does this mean >>=
*granule_frame_size <<= (header->mode - forceMode); //What does this mean <<=
}
答案 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
的正值定义,并且与所有算术运算符一样,如果结果溢出,<<
对于带符号的操作数具有未定义的行为。