276
правок
Изменения
→Побитовые сдвиги
|}
===Побитовые сдвиги===
Операторы сдвига <tex>\ll</tex> и <tex>\gg</tex> сдвигают биты в переменной влево или вправо на указанное число. На освободившиеся позиции помещаются нули, или, в случае сдвига вправо отрицательного числа, единицы (поддерживается знаковый бит). Сдвиг влево может применяться для умножения числа на два, сдвиг вправо — для деления.
<code>
x = 7; //00000111
x >> 2; //00110000
</code>
C++ Visual Studio 15
Если выполняется сдвиг влево числа со знаком и при этом затрагивается бит знака, результат не определен. Результат сдвига вправо отрицательного числа со знаком зависит от реализации компилятора. Результат операции сдвига не определен, если число, на которое пользователь хочет сдвинуть биты имеет отрицательное значение или если оно больше или равно количеству битов в исходном числе.
<code>
#include <iostream>
#include <bitset>
using namespace std;
int main() {
short short1 = 16384;
bitset<16> bitset1{short2};
cout << bitset1 << endl; // 0100000000000000 <br/>
short short3 = short1 << 1;
bitset<16> bitset3{short3}; // 16384 left-shifted by 1 = -32768
cout << bitset3 << endl; // 100000000000000 <br/>
short short4 = short1 << 14;
bitset<16> bitset4{short4}; // 4 left-shifted by 14 = 0
cout << bitset4 << endl; // 000000000000000
}
</code>