Операция может превысить точность булева операнда или привести к произвольному значению
Возможная недопустимая операция на булевом операнде происходит, когда вы используете булев операнд в арифметике, реляционной, или битовой операции и:
Булев операнд имеет представление прерывания. Размер булева типа в памяти является по крайней мере одним адресуемым модулем (размер 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.
Арифметика, реляционные, или битовые операции на булевом операнде могут превысить точность операнда и вызвать неожиданные результаты, когда используется в качестве булева значения. Операции на булевых операндах с представлениями прерывания могут возвратить произвольные значения.
Постарайтесь не выполнять операции на булевых операндах кроме этих операций:
Операция Assignment (=).
Операции равенства (== или !=).
Логические операции (&&, || или !).
| Группа: числовой |
| Язык: C | C++ |
| Значение по умолчанию: 'off' |
Синтаксис командной строки:
INVALID_OPERATION_ON_BOOLEAN |
| Влияние: низко |
| ID CWE: 190 |
Bitwise and arithmetic operation on the same data | Bitwise operation on negative value | Find defects (-checkers) | Integer overflow | Integer conversion 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 overflow | Unsigned integer conversion overflow