Ситуация, когда (bitsAvailable – mandatoryDataSize)
дает «неожиданный» результат, когда типы не подписаны, а bitsAvailable < mandatoryDataSize
- причина, по которой иногда используются подписанные типы, даже если ожидается, что данные никогда не будут отрицательными.
Я думаю, что нет строгого и быстрого правила - я обычно «по умолчанию» использую неподписанные типы для данных, у которых нет причин быть отрицательными, но тогда вы должны принять меры, чтобы арифметическая упаковка не выявила ошибок. *
Опять же, если вы используете подписанные типы, вам все равно придется иногда учитывать переполнение:
MAX_INT + 1
Ключ заключается в том, что вы должны соблюдать осторожность при выполнении арифметических действий для таких ошибок.