Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Подобные рассуждения хороши для языков совсем уж высокого уровня, где разрядность значения всегда остается где-то на заднем плане. В C/C++ она является одним из ключевых признаков типа. Если программист недостаточно хорошо понимает особенности представления, C/C++ однозначно не для него.
Женя, я достаточно хорошо их понимаю, но мне откровенно не хочется заниматься анализом выражения на предмет того, где там может оказаться преобразование от int к unsigned int, которое, мягко говоря, выполняется способом, далеким от очевидности. Проще говоря, мне не хочется думать про -1, которая вдруг может оказаться 2^32-1. На эти грабли я натыкался и больше не хочу.
Чего ты добьешься, перейдя на unsigned ? Увеличения диапазона положительных чисел в 2 раза ? Смысла в этом немного, так как 2 миллиарда или 4 миллиарда — как правило, черт один, вполне хватит. А если не хватит, то надо на 64 бита переходить, а не бороться за один бит.
А больше я ничего не вижу. Зато я знаю, что если в результате арифметики с положительными числами результат оказался отрицательным там, где такого не должно быть,то ошибку надо искать в алгоритме, а не в неявных преобразованиях.