C#移位运算(左移和右移) (转)

园子里大牛太多了,几乎写什么类型的文章都会有人写过,大牛们写过的东西,偶不写,好象还没那个功力吧。

  今天写一个比较有意思的东西 --  C#移位运算(左移和右移)。

  C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算。

  左移 (<<) 

  将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
  左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

  x<<1= x*2
  x<<2= x*4
  x<<3= x*8
  x<<4= x*16

  同理, 右移即相反:

  右移 (>>)
  将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。

  右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

  x>>1= x/2
  x>>2= x/4
  x>>3= x/8
  x>>4=x/16

  当声明重载C#移位运算符时,第一个操作数的类型必须总是包含运算符声明的类或结构,并且第二个操作数的类型必须总是 int,如:

  

复制代码
class Program
{
static void Main( string [] args)
{
ShiftClass shift1
= new ShiftClass( 5 , 10 );
ShiftClass shift2
= shift1 << 2 ;
ShiftClass shift3
= shift1 >> 2 ;

Console.WriteLine(
" {0} << 2 结果是:{1} " , shift1.valA, shift2.valA);
Console.WriteLine(
" {0} << 2 结果是:{1} " , shift1.valB,shift2.valB);
Console.WriteLine(
" {0} >> 2 结果是:{1} " , shift1.valA, shift3.valA);
Console.WriteLine(
" {0} >> 2 结果是:{1} " , shift1.valB, shift3.valB);

Console.ReadLine();
}

public class ShiftClass
{
public int valA;
public int valB;

public ShiftClass( int valA, int valB)
{
this .valA = valA;
this .valB = valB;
}

public static ShiftClass operator << (ShiftClass shift, int count)
{
int a = shift.valA << count;
int b = shift.valB << count;
return new ShiftClass(a, b);
}

public static ShiftClass operator >> (ShiftClass shift, int count)
{
int a = shift.valA >> count;
int b = shift.valB >> count;
return new ShiftClass(a, b);
}

}
}
复制代码

 

  以上表达式,输出结果是:

 

 

  因为位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运方,可以采用位移的方式进行。

  比较有意思吧?

 

转自:http://www.cnblogs.com/kakimsun/archive/2010/04/27/1722403.html

转载于:https://www.cnblogs.com/weiqt/articles/3198534.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值