使用按位运算符

我一直在研究C#,并在C ++的旧作中熟悉了一些熟悉的内容。 我从来没有理解在实际应用中按位运算符的原因。 我从来没有使用过它们,从来没有理由使用它们。 我一直在研究他们的工作方式。 下面的例子显示了移位位运算符。 按位运算符,它们的用途以及它们的工作原理是什么?

也许我在按位逻辑中错过了一些东西。

byte bitComp = 15;              // bitComp = 15 = 00001111b
byte bresult = (byte) ~bitComp; // bresult = 240 = 11110000b

以下是补码位运算符的一个例子:

byte bitComp = 15;              // bitComp = 15 = 00001111b
byte bresult = (byte) ~bitComp; // bresult = 240 = 11110000b

一个典型的用途是操纵代表互斥“标志”的位。

来自MSDN的示例:枚举类型

[Flags]
enum Days2
{
    None = 0x0,
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x10,
    Friday = 0x20,
    Saturday = 0x40
}

class MyClass
{
    Days2 meetingDays = Days2.Tuesday | Days2.Thursday;

    Days2 notWednesday = ~(Days2.Wednesday);
}

另请参阅堆栈溢出问题最常见的C#按位操作。


这是一个很多人都没有发现的日常按位操作技巧:

如果枚举类型表示一个位域,则需要将每个枚举条目定义为不同的位值,如下所示:

enum
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    Option5 = 16
};

但很容易忘记序列中的下一个项目需要是最后一个数字的两倍。 使用位移可以使序列更容易正确地获取:

enum
{
    Option1 = 1<<0,
    Option2 = 1<<1,
    Option3 = 1<<2,
    Option4 = 1<<3,
    Option5 = 1<<4
};

另一个典型的(但我不太常见的)用法是将几个数字组合成一个大数字。 一个例子可以是windows RGB宏:

#define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | ((WORD) (g) << 8)) | (((DWORD) (BYTE) (b)) << 16)))

如果您需要3个字节并从中组成一个整数,则表示RGB值。

链接地址: http://www.djcxy.com/p/72493.html

上一篇: Using bitwise operators

下一篇: << operator in C++?