Если честно, я не совсем уверен, что коды так хороши. В нем неприятный запах. А именно эта функция:
unsigned int i4_xor ( unsigned int i, unsigned int j )
//****************************************************************************80
//
// Purpose:
//
// I4_XOR calculates the exclusive OR of two integers.
//
// Modified:
//
// 16 February 2005
//
// Author:
//
// John Burkardt
//
// Parameters:
//
// Input, unsigned int I, J, two values whose exclusive OR is needed.
//
// Output, unsigned int I4_XOR, the exclusive OR of I and J.
//
{
unsigned int i2;
unsigned int j2;
unsigned int k;
unsigned int l;
k = 0;
l = 1;
while ( i != 0 || j != 0 )
{
i2 = i / 2;
j2 = j / 2;
if (
( ( i == 2 * i2 ) && ( j != 2 * j2 ) ) ||
( ( i != 2 * i2 ) && ( j == 2 * j2 ) ) )
{
k = k + l;
}
i = i2;
j = j2;
l = 2 * l;
}
return k;
}
Также есть i8_xor. И пара функций пресса.
Я думаю, что сообщение для DailyWTF в порядке.
РЕДАКТИРОВАТЬ: Для программистов, не являющихся c, вот краткое руководство к тому, что делает выше:
function xor i:unsigned, j:unsigned
answer = 0
bit_position = 1
while i <> 0 or j <> 0
if least significant bit of i <> least significant bit of j
answer = answer + bit_position
end if
bit_position = bit_position * 2
i = i / 2
j = j / 2
end while
return answer
end function
Чтобы определить, установлен или сброшен младший значащий бит, используется следующее:
bit set if i <> (i / 2) * 2
bit clear if i == (i / 2) * 2
Что делает код дополнительным WTFy, так это то, что C определяет оператор XOR, а именно '^'. Итак, вместо:
result = i4_xor (a, b);
Вы можете иметь:
result = a ^ b; // no function call at all!
Оригинальный программист должен знать об операторе xor. Но даже если они этого не сделали (и предоставили, это еще один запутанный символ C), их реализация функции XOR невероятно плоха.