14.8 Shift operators

The << and >> operators are used to perform bit shifting operations.
shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
For an operation of the form x << count or x >> count, binary operator
overload resolution (?4.2.4) is
applied to select a specific operator implementation. The operands are
converted to the parameter types of
the selected operator, and the type of the result is the return type of the
operator.
Chapter 14 Expressions
163
When declaring an overloaded shift operator, the type of the first operand
must always be the class or struct
containing the operator declaration, and the type of the second operand
must always be int.
The predefined shift operators are listed below.
?Shift left:
int operator <<(int x, int count);
uint operator <<(uint x, int count);
long operator <<(long x, int count);
ulong operator <<(ulong x, int count);
The << operator shifts x left by a number of bits computed as described
below.
The high-order bits outside the range of the result type of x are
discarded, the remaining bits are shifted
left, and the low-order empty bit positions are set to zero.
?Shift right:
int operator >>(int x, int count);
uint operator >>(uint x, int count);
long operator >>(long x, int count);
ulong operator >>(ulong x, int count);
The >> operator shifts x right by a number of bits computed as described
below.
When x is of type int or long, the low-order bits of x are discarded, the
remaining bits are shifted
right, and the high-order empty bit positions are set to zero if x is
non-negative and set to one if x is
negative.
When x is of type uint or ulong, the low-order bits of x are discarded, the
remaining bits are shifted
right, and the high-order empty bit positions are set to zero.
For the predefined operators, the number of bits to shift is computed as
follows:
?When the type of x is int or uint, the shift count is given by the
low-order five bits of count. In other
words, the shift count is computed from count & 0x1F.
?When the type of x is long or ulong, the shift count is given by the
low-order six bits of count. In
other words, the shift count is computed from count & 0x3F.
If the resulting shift count is zero, the shift operators simply return the
value of x.
Shift operations never cause overflows and produce the same results in
checked and unchecked contexts.
When the left operand of the >> operator is of a signed integral type, the
operator performs an arithmetic
shift right wherein the value of the most significant bit (the sign bit) of
the operand is propagated to the
high-order empty bit positions. When the left operand of the >> operator is
of an unsigned integral type, the
operator performs a logical shift right wherein high-order empty bit
positions are always set to zero. To
perform the opposite operation of that inferred from the operand type,
explicit casts can be used. [Example:
For example, if x is a variable of type int, the operation
unchecked((int)((uint)x >> y)) performs a
logical shift right of x. end example]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值