Правильным решением было бы сделать
var bit = Math.Log(a ^ b, 2);
Хотя, конечно, это оставляет открытым вопрос о том, что произойдет, если по какой-либо причине больше , чем один бит отличается.
Вы можете использовать
var bit = (int)Math.Log(a ^ b, 2);
, чтобы получить индекс старшего другого бита, если различается более одного.
Предупреждение: Для правильности любая такая функция должна также проверять, что два аргумента a
и b
на самом деле отличаются, прежде чем пытаться предоставить результат.В противном случае вы получите либо бессмысленный результат, либо прямое исключение.Это верно для всех решений, представленных здесь, включая это.