Jeffrey Stedfast предложил several functions that calculates the nearest power of 2. Одна из функций имеет код следующим образом:В чем смысл этого кода на C? [оценка короткого замыкания]
static uint32_t
nearest_pow (uint32_t num)
{
uint32_t j, k;
(j = num & 0xFFFF0000) || (j = num); // What is this?
...
}
Чтобы полностью понять код, я попытался изменить линию к:
j = num & 0xFFFF0000;
j = j | (j = num);
Нечаянно, я получил правильный результат. Однако, когда я применил такое преобразование к следующим строкам (не включенному в мою цитату), я получил неправильный результат. Оказалось, что я неправильно понял смысл кода.
В чем смысл (j = num & 0xFFFF0000) || (j = num);
?
На самом деле, мне нужно преобразовать функцию в другие языки программирования.
Я, возможно, сэкономлю вам время и усилия, если вы спросите: «вам действительно нужно выполнить эту * конкретную реализацию с помощью бит-хаков на вашем языке»? Может быть, ваш язык имеет библиотечную функцию? Кроме того, разница между v2 и v4 не такая большая, но v4 имеет некоторые ограничения. Принесете ли вы что-нибудь от этого? Это не ответ на ваш вопрос, но полностью исключить эту реализацию можно было бы косвенным решением для [Проблема] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – Drop
@ Drop: На мой взгляд, функции, выполняющие базовые функции, должны быть реализованы с использованием самого быстрого подхода. Необходимость использования основных функций внутри цикла в миллион раз, вероятно, встретится в наши дни. Да, действительно, последний вариант имеет ограничения, но в определенных обстоятельствах ограничения потенциально желательны. Поэтому я буду использовать его в качестве варианта метода [Sean Eron Anderson] (http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2). – Astaroth