Для начала вы можете сравнить побайтно (или пословно), и когда вы найдете поиск различий в пределах этого байта (или слова) для первого бита разности.
Мне кажется немного неправдоподобным, что добавление узла к массиву сегментов будет настолько быстрым, что это имеет значение, будь то умное переключение битов, чтобы найти первый бит разницы внутри байта (или слова), или просто отток в цикле до CHAR_BIT (или что-то). Возможно, однако.
Кроме того, если идентификаторы в основном случайные с равномерным распределением, то вы обнаружите разницу в первых 8 битах примерно в 255/256 случаев. Если все, что вас волнует, это поведение в среднем случае, а не в худшем случае, просто сделайте глупость: очень маловероятно, что ваш цикл будет работать долго.
Для справки, однако, первый бит разности между числами x
и y
является первым битом, установленным в x ^ y
. Если вы программировали в GNU C, __builtin_clz
может быть вашим другом. Или, может быть, __builtin_ctz
, я немного сонный ...
Ваш код выглядит как Java, поэтому, я думаю, вы ищете bitfoo integer log .