[c++] объясните операторы << и >>

lord2476

что делают операторы >> и <<
с целыми числами

psm-home

Лучше всего было бы сослаться на стандарт, но его нету под рукой. В C операторы << и >> - это операторы битового сдвига. В С++ эти операторы можно перегружать, поэтому там это то, что хочется программисту.

lord2476

о черт! как это я запамятовал.

psm-home

ISO C99

6.5.7 Bitwise shift operators
Syntax
1 shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
Constraints
2 Each of the operands shall have integer type.
Semantics
3 The integer promotions are performed on each of the operands. The type of the result is
that of the promoted left operand. If the value of the right operand is negative or is
greater than or equal to the width of the promoted left operand, the behavior is undefined.
4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with
zeros. If E1 has an unsigned type, the value of the result is E1 &#180; 2E2, reduced modulo
one more than the maximum value representable in the result type. If E1 has a signed
type and nonnegative value, and E1 &#180; 2E2 is representable in the result type, then that is
the resulting value; otherwise, the behavior is undefined.
5 The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
or if E1 has a signed type and a nonnegative value, the value of the result is the integral
part of the quotient of E1 / 2E2. If E1 has a signed type and a negative value, the
resulting value is implementation-defined.

zya369

о черт! как это я запамятовал.
у меня похожая фигня была : я увидел перегруженный оператор <<= и задумался, что же он делает в реальной жизни

rosali

Эх с этим >> можно тааак наколоться! На его работу ведь влияет модификатор signed/unsigned... Это вроде ни для кого не новость, но ко второму часу отлаживаний очень приятно об этом наконец вспомнить Особенно, если в сочетании с тем, что на char-ах он не определен, так что сначала кастится в int, потом работает >>, потом обратно кастится... прикольно, но на short определен...
Оставить комментарий
Имя или ник:
Комментарий: