Re: Беззнаковая арифметика
От: Пётр Седов Россия  
Дата: 14.10.06 18:06
Оценка: +1
Здравствуйте, eao197, Вы писали:
E>Еще одна статья из The Artima C++ Source: Built-in Type Safety?.
Вкратце опишу первую ошибку ("defect one") для тех, кто не читал статью. Есть целое число от 0 до 100 ("signal quality"). Поначалу оно хранилось в переменной типа int:

    /**
     * Typedef used to represent signal quality as a percentage.
     * 100 represents perfect signal, 0 no signal.
     */
    typedef int Signal;

Потом кто-то решил заменить int на unsigned ("someone decided that an unsigned was more appropriate for a value in the range [0, 100]"):

    /**
     * Typedef used to represent signal quality as a percentage.
     * 100 represents perfect signal, 0 no signal.
     */
    typedef unsigned Signal;

Ну и получили ошибку: "So, 10u — 20 is a very big unsigned number." Автор (Thomas Guest) делает из этого четрые вывода ("lessons learned"), но не делает главного: избегайте беззнаковой арифметики.
Пётр Седов (ушёл с RSDN)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.