, 4x4 .
:
, , det=10.
{40,41,42,43}.
, .
- det*4.
, 10*4=40.
0b101000 (40) 0b101000 0b101000 0b101000
^0b101000 (40) ^0b101001 (41) ^0b101010 (42) ^0b101011 (43)
=0b000000 =0b000001 =0b000010 =0b000011
xor (^) , {0,1,2,3}.
, , , num1 ^ mask < 4, , mask, num1 3 , mask.
num1 < mask, , (), , , num1 ^ mask 4.
, num1 ^ mask < 4 , num1 {40,41,42,43}.
, {0,1,2,3}, .
, num1, num2, .
int checkDoubleGamma(int det){
static const int hitTable[4][4] = {
{Double, Parallel, Perpendicular, Double},
{Parallel, Double, Double, Perpendicular},
{Perpendicular, Double, Double, Parallel},
{Double, Perpendicular, Parallel, Double}
};
const int num1 = evList[crysList[0]].crystalNum;
const int num2 = evList[crysList[1]].crystalNum;
switch(det) {
case 10:
case 11:
case 13:
case 14:
{
const unsigned int mask = 4 * det;
const unsigned int a = num1 ^ mask;
if(a < 4){
const unsigned int b = num2 ^ mask;
if(b < 4)
return hitTable[a][b];
}
return Double;
}
default:
throw string("made it to default case in checkDoubleGamma switch statement, something is wrong");
break;
}
}
: 1x4
xor- a^b, , 4x4.
^ 00 01 10 11
00 00 01 10 11
01 01 00 11 10
10 10 11 00 01
11 11 10 01 00
00,11 = Double
01 = Parallel
10 = Perpendicular
, 1x4 a^b .
a^b, , num1^mask^num2^mask, num1^num2, xor.
, num2 {40,41,42,43}. num1 mask , num2 num1 , num2 mask . num2^mask .
int checkDoubleGamma(int det){
static const int hitTable[4] = {Double, Parallel, Perpendicular, Double};
const int num1 = evList[crysList[0]].crystalNum;
const int num2 = evList[crysList[1]].crystalNum;
switch(det) {
case 10:
case 11:
case 13:
case 14:
{
const unsigned int mask = 4 * det;
const unsigned int a = num1 ^ mask;
if(a < 4){
const unsigned int b = num1 ^ num2;
if(b < 4)
return hitTable[b];
}
return Double;
}
default:
throw string("made it to default case in checkDoubleGamma switch statement, something is wrong");
break;
}
}