使用按位运算符
我一直在研究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下一篇: << operator in C++?