I'm not sure I quite follow, but the statement:
if((i << (0x20 - PID)) & SupportedPID20){
//Something here.
}
If say for example Supported_PID20 is xxx1xxxxxxxxxxxxxxxxxxxxxxxxxxxx, then the statement would execute if PID = 0x04, where x is don't care.
The following modified statement:
if((i << (0x20 - PID)) == SupportedPID20){
//Something here.
}
If say for example Supported_PID20 is 00010000000000000000000000000000, then the statement would execute if PID = 0x04.