#c #c
#c #c
Вопрос:
Что означает >>=
символ в C или C ? Есть ли у него какое-либо конкретное имя?
У меня есть этот for
цикл в некотором коде CUDA, который выглядит следующим образом
for(int offset=blockDim.x; offset>0; offset >>=1)
{
//Some code
}
Как переменная offset модифицируется с помощью >>=
оператора?
Ответ №1:
>>=
Символ является формой присваивания сдвига вправо, то есть x >>= y;
является сокращением от x = x >> y;
(если не перегружен, чтобы означать что-то другое).
Сдвиг вправо на 1 эквивалентен делению на 2. Этот код выглядит так, как будто кто-то не доверяет компилятору выполнять самые базовые оптимизации, и должен быть эквивалентен:
for( int offset = blockDim.x; offset > 0; offset /= 2 ){ ... }
Больше информации о побитовых операциях здесь:
Комментарии:
1. Учитывая, что в этом случае оба операнда имеют тип int, использование перегруженного оператора может быть исключено.
2. Сдвиг вправо на 1 очень похож на деление на 2, но вы можете получить немного другой результат для отрицательного числа из-за правил округления для целочисленного деления. В этом примере нет отрицательных чисел, поэтому здесь это эквивалентно. Но в C и C -3 / 2 == -1, в то время как -3>> 1 = -2.
Ответ №2:
Буквально offset = offset >> 1
, то есть offset
делится на 2
Ответ №3:
Это версия назначения сдвига вправо:
foo >>= 2; // shift the bits of foo right by two places and assign the result to foo
Ответ №4:
это оператор побитового сдвига вправо. это сдвигает биты переменной вправо на значение правого операнда.