Я нашел этот код в BouncyCastle в классе PKCS1Encoding , когда метод checkPkcs1Encoding
пытается проверить, что байтовый массив не содержит нулевой (0) байт.
private static int checkPkcs1Encoding(byte[] encoded, int pLen)
{
int correct = 0;
[...]
for (int i = 1; i < plen; i++)
{
int tmp = encoded[i];
tmp |= tmp >> 1;
tmp |= tmp >> 2;
tmp |= tmp >> 4;
correct |= (tmp & 1) - 1;
}
[...]
}
Я спрашивал себя, почему это был бы лучший подход при проверке того, что байт не равен 0, вместо того, чтобы просто делать что-то вроде:
encoded[i] != (byte) 0x00;
Это просто из-за постоянного поведения времени выполнения или что-то вродеболее короткая версия действительно не работает из-за определенных угловых случаев (подписанный байт, ...)?