的位移位操作符在C#中,但定義宏沒有按」噸。
要理解你可以做的是分別計算值,然後將它們放入枚舉中。
當然你知道|
是按位或運算符。以防萬一有什麼操作<<
確實是二進制左移:
1 << 16 = 10000000000000000_2 //those are 16 zeroes and _2 indicates binary
依次爲:
10000000000000000_2 = 65536
由2 mutiplying數量由表示的次數的quivalent第二個操作數。
1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
這是正確的,它是由二的冪數乘以:現在
1 << 1 <=> 1 * 2^1 = 2
1 << 2 <=> 1 * 2^2 = 4
1 << 3 <=> 1 * 2^3 = 8
,由於FOO_1 = 0
然後
DISP_1 = MASK(FOO_1)
=>
DISP_1 = ((1 << 16) | (FOO_1))
=>
DISP_1 = (65536 | (FOO_1))
=>
DISP_1 = (65536 | FOO_1)
=>
DISP_1 = (65536 | 0)
=>
DISP_1 = 65536
做同樣的FOO_2
我拿有值1會給你:
DISP_2 = (65536 | FOO_2)
=>
DISP_2 = (65536 | 1)
=>
DISP_2 = 65537
隨着下列工作正常說:
enum FOO
{
FOO_1 = 0,
FOO_2,
// etc
}
enum DISP
{
DISP_1 = (1<<16) | (int)(FOO.FOO_1),
DISP_2 = (1<<16) | (int)(FOO.FOO_2),
// etc
}
你應該閱讀有關移位(<<)和或(|)在C++這樣你就可以明白這是怎麼回事運營商。 – coredump
我絕對會! – Wint