char上的位操作符

本文关键字:操作符 位操作 char | 更新日期: 2023-09-27 18:12:28

我有一些旧的C代码正在转换为c#。有很多位操作符,比如

const unsigned char N = 0x10;
char C;
.....
if (C & N)
{
   .....
}

在c#中等价的是什么?例如,第一行在c#中是无效的,因为编译器说没有从int到char的转换。

char上的位操作符

const char N = (char)0x10;

const char N = ''x10';

if ((C & N) != 0) // Be aware the != has precedence on &, so you need ()
{
}

但是要注意,C中的char是1字节,在c#中是2字节,所以也许你应该使用byte

const byte N = 0x10;

,但也许你想使用标志,所以你可以使用enum:

[Flags]
enum MyEnum : byte
{
    N = 0x10
}
MyEnum C;
if (C.HasFlag(MyEnum.N))
{
}

(注意Enum。HasFlag在c# 4.0中被引入)