之所以写这边文章,是因为在某些情况下,运用掩码来传递信息,显得非常简洁和方便.比如有2个参数共同确定1个实物.如牌,有花色和值.那么,传2个参数,显得非常繁琐,而且容易出错.

那么定义 黑 , 红 , 梅 , 品 花色为 3,2,1, 0, 大小王为4 .1~k :分别为1~13.小王14 , 大王15 .大王最大,值的二进制正好为 : 1111(注意必须全为1 , 十进制为15) 即为牌值掩码 , 则花色掩码为 11110000(十进制为240)

(11111111^1111 = 11110000)

 

            
            Console.WriteLine( ( 3<<4 ) + 1); 
            Console.WriteLine( (49&240)/16 );//240 为花色掩码 11110000    获得花色
            Console.WriteLine(49&15);//15 为牌值掩码    获得牌值

上面代码 : 3花色 , 1 : 牌值

<<4 : 花色掩码 11110000 后面的0占4字节

至于/16 : 关于牌值的掩码 : 1111(二进制) 占4bit,2^4 = 16

得到49 , 然后分别取得花色和值

wKiom1fP5uyhy3qsAAAdJ8o-lZ0676.png-wh_50


可以做一个另外的一个测试 :

低位掩码 : 11(3) 高位掩码 : 1100(12)

测试代码如下 :

 

            Console.WriteLine((2<<2)+1);
            Console.WriteLine((9&12)/4);
            Console.WriteLine(9 & 3);

得到结果:

wKioL1fSPAmiVWSSAAATdMzqlvA395.png-wh_50

OK , 牌花色“2” , 值 “1”