Операция может превысить точность логического операнда или привести к произвольному значению
Этот дефект возникает при использовании логического операнда в арифметической, реляционной или побитовой операции и:
Логический операнд имеет представление ловушки. Размер логического типа в памяти составляет по крайней мере одну адресуемую единицу (размер char). Логический тип требует только одного бита для представления значения true (1) или false (0). Представление логического операнда в памяти содержит биты заполнения. Представление памяти может привести к значениям, которые не являются true или false, представление ловушки.
Результат операции может превышать точность логического операнда.
Например, в этом фрагменте кода:
bool_v >> 2 |
Если значение bool_v является true (1) или false (0), побитовый сдвиг превышает однобитовую точность bool_v и всегда приводит к 0.
Если bool_v имеет представление ловушки, результатом операции является произвольное значение.
Возможная недопустимая операция для логического операнда не вызывает дефектов, если:
Операция не приводит к переполнению точности. Например, побитовое & или | операции с 0x01 или 0x00.
Логический операнд не может иметь представление ловушки. Например, постоянное выражение, которое приводит к 0 или 1или сравнение, вычисленное для true или false.
Арифметические, реляционные или побитовые операции с логическим операндом могут превышать точность операнда и вызывать неожиданные результаты при использовании в качестве логического значения. Операции с логическими операндами с представлениями trap могут возвращать произвольные значения.
Избегайте выполнения операций с логическими операндами, отличными от следующих:
Операция назначения (=).
Операции по обеспечению равенства (== или !=).
Логические операции (&&, ||, или !).
| Группа: Числовые |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
INVALID_OPERATION_ON_BOOLEAN |
| Воздействие: Низкий |
| ИДЕНТИФИКАТОР CWE : 190 |
Bitwise and arithmetic operation on the same data | Bitwise operation on negative value | Find defects (-checkers) | Integer conversion overflow | Integer overflow | Integer precision exceeded | MISRA C++:2008 Rule 4-5-2 | MISRA C:2004 Rule 12.6 | MISRA C:2012 Rule 10.1 | MISRA C:2012 Rule 12.2 | Shift of a negative value | Shift operation overflow | Unsigned integer conversion overflow | Unsigned integer overflow