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(510);
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的幂次方的乘除运方,可以采用位移的方式进行。

最新文章

  1. css 选择器优先级
  2. 使用egypt+graphviz生成函数调用关系图示例
  3. Android Priority Job Queue (Job Manager):线程任务的容错重启机制(二)
  4. IOS的沙盒机制
  5. android去掉EditView的默认焦点问题
  6. uva 10313
  7. spring注入Properties
  8. zlib压缩解压示例
  9. [TypeScript] Function Overloads in Typescript
  10. ASP.net导出Excel的几种方式
  11. “Clang” CFE Internals Manual---中文版---&quot;Clang&quot;C语言前端内部手册
  12. XML(一)XML大揭秘
  13. 10 GridView 样式属性
  14. 2000w数据,redis中只存放20w的数据,如何保证redis中的数据都是热点数据
  15. AngelToken:区块链技术的突破
  16. 物料没加DUMMY
  17. 【WEB前端】CSS书写规范
  18. SQL Server 高并发Insert数据解析,实践
  19. 事务的ACID性质
  20. pig:group by之后的其它统计方法一

热门文章

  1. 解决VMware下安装Ubuntu 16.04 不支持1920X1080分辨率的问题
  2. SVN版本控制图标经常延时显示或未显示问题解决方法
  3. Echarts数据可视化series-heatmap热力图,开发全解+完美注释
  4. 慢SQL汇总
  5. webview的javascript与Native code交互
  6. Spring批量更新batchUpdate提交和Hibernate批量更新executeUpdate
  7. ArcGIS二次开发AO软件安装破解教程
  8. LINUX 笔记-tee命令
  9. 树莓派.安装Samba环境
  10. Repeated Substring Pattern --重复字符串