演算の回数っていうのがよくわからないが、
BitOperations.LeadingZeroCount(val)
の比較じゃダメなの?