Sign change integer conversion overflow

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

Описание

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

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

Зафиксировать

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

См. примеры исправлений ниже.

Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты 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++
По умолчанию: On
Синтаксис командной строки: SIGN_CHANGE
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 192, 194, 195, 196
Введенный в R2013b