1.首先楼主需要知道十进制与二进制的转换,鼠标有三个键(左右中)且每个键都有两种状态(按下与未按下),所以用二进制的1与0分别表示按下与未按下的状态。如001表示左键被按下,又如011表示左右键同时被按下。他们分处于三个不同的数位所以不会混淆。
2.其次楼主还需要知道And连接两个Integer数的时候的计算方式。实际上每个Integer的数都要占用2个字节也就是16个位,但是为了表示方便这里只用末尾三位进行表示和说明前面省略部分都是“0”。如001(十进制对应1)与011(十进制对应3):计算时三个数位分别计算,从高位到低位分别可以理解为0 And 0 = 0,0 And 1 = 0,1 And 1 = 1。把这里的三个等式的0与1换成Boolean的False与True也可以得到相同的结果。
3.下面考虑三种情况
a)If Button = X Then(这里的X可以取1~7)
e.g.当X为2时,表示当只按下鼠标右键时,判断式为True,执行后面的语句块。
e.g.当X为5(二进制对应101)时,表示当同时只按下鼠标左中两个键的时候,判断式为True,执行后面的语句块。
不难看出此时的Button要与X完全对应。
b)If Button And X Then(这里的X可以取1~7)
①首先考虑三个特殊情况,即X为1,2或者4的时候。
判断式若要为True,则变成了Button 与X的And运算结果不能为000(对应十进制0,0等于False)
根据运算法则只要存在一个1(True)And 1(True)的运算位即可,也就是说,按下的键至少要有一个是X所指示的。
e.g.当X为3(二进制对应011)时,判断式的含义是Button只要取001(十进制对应1,左键)或010(十进制对应2,右键)或011(十进制对应3,左右键同时按)或111(十进制对应7,左中右键同时按)其中的一个都可以让判断式为True
c)If ( Button And X ) = X Then(这里的X可以取1~7)
①首先考虑三个特殊情况,即X为1,2或者4的时候。
判断式若要为Ture,则变为了Button与001,与010,与100的And运算结果要仍然等于001,010,100。
根据运算法则0与无论是0(False)还是1(True)进行And的时候结果都是0(False),所以是否按下其他键并不会影响Button And X的值,为了让判断式为True,我们只需要让1 And 1出现即可。
所以也就是:至少要按下X所指示的那个键即可
②考虑X为011,101或110三种情况,即分别为十进制的3,5,6。
按照①中的分析,同理可以得出:至少要按下X所指示的那两个键即可
③当X为111(十进制对应7)时
同理:需要同时按下左中右三个键
综上对于这种情况,至少满足了X对应的键按下即可。
上面三种情况的用Venn图类比来看就是


d)If ( Button And X ) = Y(X不等于Y且都在1~7之间取值)
可以自己分析下。