C# 位运算

创建时间:
2014-06-08 02:36
最近更新:
2018-08-11 00:46

Resource - MSDN

  1. C# 运算符 - 含优先级说明

Overview

在 C# 中可以对整型运算对象按位进行逻辑运算。

按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。

C# 支持的位逻辑运算符共 6 种

  1. ~ 位逻辑非运算
  2. & 位逻辑与运算
  3. | 位逻辑或运算
  4. ^ 位逻辑异或运算
  5. « 位左移运算
  6. » 位右移运算

以上 6 种运算符,除 ~ 运算符为单目之外,其它 5 种位运算符均为双目。

C# 位运算规则

  • 位运算的操作数仅限整型与字符型。
  • 位运算的结果总是 int,详见以下测试记录。
  • 在进行位与、或、异或运算时,如果两个运算对象的类型不一致,则 C# 要对不一致的类型进行类型转换,变成一致的类型,然后进行运算。类型转换的规则同算术运算中整型量的转换则一致。

Tony Test Record - 位运算的结果总是 int

char c0 = 'a';
//char c1 = c0 ^ 0; //无法通过编译:无法将类型 "int" 隐式转换为 "char"。存在一个显式转换 (是否缺少强制转换?)。
object o0 = c0 & 1; //执行后 o0 的类型为 int。
int int32 = c0 | 15;
byte byte0 = 15;
byte byte1 = 75;
byte test0 = byte0 & byte1; //编译时报错 "无法将类型“int”隐式转换为“byte”。存在一个显式转换(是否缺少强制转换?)"。
byte test1 = byte0 | byte1; //编译时报错 "无法将类型“int”隐式转换为“byte”。存在一个显式转换(是否缺少强制转换?)"。
byte test2 = byte0 ^ byte1; //编译时报错 "无法将类型“int”隐式转换为“byte”。存在一个显式转换(是否缺少强制转换?)"。

结论:位运算的结果总是 int。