Подпишите целочисленное переполнение преобразования изменения

Переполнение при преобразовании между целыми числами со знаком и беззнаковым целым

Описание

Подпишитесь целочисленное переполнение преобразования изменения происходит при преобразовании беззнакового целого в целое число со знаком. Если переменная не имеет достаточного количества байтов, чтобы представлять и исходную константу и знаковый бит, переполнение преобразования.

Точное выделение ресурсов хранения для различных типов с плавающей точкой зависит от вашего процессора. Смотрите Target processor type (-target).

Фиксация

Фиксация зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают историю события, можно проследить использование, щелкните правой кнопкой по опциям по исходному коду и смотрите предыдущие связанные события. См. также Интерпретируют Результаты Polyspace Bug Finder.

Смотрите примеры мер ниже.

Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.

Примеры

развернуть все

char sign_change(void) {
    unsigned char count = 255;

    return (char)count;
}

В операторе возврата символьная переменная count без знака преобразована в символ со знаком. Однако char имеет 8 битов, 1 для знака константы и 7, чтобы представлять номер. Операция преобразования переполняется потому что 255 использования 8 битов.

Исправление — типы преобразования Изменения

Одно возможное исправление использует больший целочисленный тип. При помощи int существует достаточно битов, чтобы представлять знак и числовое значение.

int sign_change(void) {
    unsigned char count = 255;

    return (int)count;
}

Проверяйте информацию

Группа: числовой
Язык: C | C++
Значение по умолчанию: на
Синтаксис командной строки: SIGN_CHANGE
Влияние: носитель
ID CWE: 192, 194, 195, 196

Введенный в R2013b