Простейшая задачка на типы данных
Внутреннее чувство мне почему-то подсказывает, что просто (unit64_t)max - (uint64_t)min + 1 - это и будет то, что тебе нужно, кроме одного случая выше.
что просто (unit64_t)max - (uint64_t)min + 1для того же (-5, 5) ни static_cast, ни reinterpret_cast не дадут правильного значения же
Мб ты имел ввиду reinterpret_cast<uint64_t>(max - min + 1) ?
все верно написал. Тут работает магия two`s complement. Для понятности можешь нарисовать окружность со всеми возможными битовыми значениями (хотя бы для 3-битных чисел), а рядом с каждым значением — его знаковое и беззнаковое представления. И удостовериться, что разница (== дуга окружности) всегда будет корректна.
да, тупанул чет
Оставить комментарий
Garryss
Что-то туплю. Хочу написать такую функцию:Должна возвращать количество элементов между low и high включительно. Например, range_size(-5, 5) = 11. Функция должна корректно обрабатывать все возможные значения аргументов, включая INT64_MIN (но при этом гарантируется low <= high).
Всё, что ни придумаю, — целая куча IF-ов. А опыт подсказывает, что здесь должен быть простой битовый one-liner.