Операция может превысить точность булева операнда или привести к произвольному значению
Этот дефект происходит, когда вы используете булев операнд в арифметике, реляционной, или битовой операции и:
Булев операнд имеет представление прерывания. Размер булева типа в памяти является по крайней мере одним адресуемым модулем (размер 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 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