C#移位运算符简介

开发 后端
C#移位运算符是什么呢?具体的操作是什么呢?那么本文就向你介绍这方面的内容。

C#移位运算符中的<< 和 >> 运算符用于执行移位运算。

shift-expression:(移位表达式:)

additive-expression(加法表达式)

shift-expression   <<   additive-expression(移位表达式   <<   加法表达式)

shift-expression   >>   additive-expression(移位表达式   >>   加法表达式)

对于 x << count 或 >> count 形式的运算,应用二元运算符重载决策以选择特定的运算符实现。操作数转换为所选运算符的参数类型,结果的类型是该运算符的返回类型。

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

下面列出了预定义的移位运算符。

C#移位运算符之左移位: 

  1. int operator <<(int x, int count);  
  2. uint operator <<(uint x, int count);  
  3. long operator <<(long x, int count);  
  4. ulong operator <<(ulong x, int count); 

<< 运算符将 x 向左位移若干个位,具体计算方法如下所述。

放弃 x 中经移位后会超出结果类型范围的那些高序位,将其余的位向左位移,将空出来的低序位均设置为零。

C#移位运算符之右移位:

  1. int operator >>(int x, int count);  
  2. uint operator >>(uint x, int count);  
  3. long operator >>(long x, int count);  
  4. ulong operator >>(ulong x, int count); 

>> 运算符将 x 向右位移若干个位,具体计算方法如下所述。

当 x 为 int 或 long 类型时,放弃 x 的低序位,将剩余的位向右位移,如果 x 非负,则将高序空位位置设置为零,如果 x 为负,则将其设置为 1。

当 x 为 uint 或 ulong 类型时,放弃 x 的低序位,将剩余的位向右位移,并将高序空位位置设置为零。

C#移位运算符的使用:

对于预定义运算符,位移的位数按下面这样计算:

当 x 的类型为 int 或 uint 时,位移计数由 count 的低序的 5 位给出。换言之,位移计数由 count & 0x1F 计算出。

当 x 的类型为 long 或 ulong 时,位移计数由 count 的低序的 6 位给出。换言之,位移计数由 count & 0x3F 计算出。

如果计算位移计数的结果为零,则移位运算符只返回 x 的值。

移位运算从不会导致溢出,并且在 checked 和 unchecked 上下文中产生的结果相同。

当 >> 运算符的左操作数为有符号的整型时,该运算符执行算术右移位,在此过程中,操作数的最有效位(符号位)的值扩展到高序空位位置。当 >> 运算符的左操作数为无符号的整型时,该运算符执行逻辑右移位,在此过程中,高序空位位置总是设置为零。若要执行与由操作数类型确定的不同的移位运算,可以使用显式强制转换。例如,如果 x 是 int 类型的变量,则 unchecked((int)((uint)x >> y)) 运算执行 x 的逻辑右移位。

C#移位运算符的相关内容就介绍到这里,希望对你学习C#移位运算符有所帮助。

【编辑推荐】

  1. C#运算符重载“>”的操作浅析
  2. C#运算符优先级介绍
  3. C#关系运算符简介
  4. C#逻辑运算符简介
  5. C#条件运算符简介
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-08-12 13:35:22

C#关系运算符

2009-08-12 14:29:32

C#条件运算符

2009-08-12 14:23:09

C#逻辑运算符

2009-08-11 15:51:08

C#运算符算术运算符

2009-08-12 09:30:10

C#??运算符

2009-08-12 15:20:18

C#赋值运算符复合赋值运算符

2009-08-12 15:02:49

C#赋值运算符简单赋值运算符

2009-09-01 10:08:57

C#运算符

2009-08-11 14:16:38

C# New运算符

2009-08-12 10:47:03

C#运算符重载

2009-09-04 13:18:10

C#允许运算符重载

2009-08-12 10:07:51

C#运算符

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-14 10:16:57

C#运算符重载

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2009-08-12 13:07:13

C#运算符优先级

2009-08-11 16:03:13

C#运算符

2009-08-12 12:46:11

C#运算符重载

2009-08-12 10:20:52

C#位运算符

2009-08-12 10:37:13

C#运算符重载
点赞
收藏

51CTO技术栈公众号