Операция с целочисленным размером вместо точности может привести к неопределенному поведению
Этот дефект возникает, когда целочисленное выражение использует размер целого числа в операции, превышающей целочисленную точность. На некоторых архитектурах размер целого числа в памяти может включать в себя биты знака и заполнения. На этих архитектурах размер целого больше, чем точность, которая является всего лишь количеством битов, которые представляют значение целого числа.
Использование размера целого числа в операции с целочисленной точностью может привести к переполнению целого числа, обтеканию или неожиданным результатам. Например, целое число без знака может храниться в памяти в 64 битах, но использует только 48 бит для представления его значения. Операция сдвига влево 56 бит для этого целого числа является неопределенным поведением.
Предположение, что размер целого числа равен его точности, также может привести к проблемам переносимости программ между различными архитектурами.
Не используйте размер целого числа вместо его точности. Чтобы определить целочисленную точность, выполните процедуру вычисления точности или используйте функцию builtin, такую как __builtin_popcount().
| Группа: Числовые |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
INT_PRECISION_EXCEEDED |
| Воздействие: Низкий |
| ИДЕНТИФИКАТОР CWE : 190 |
Bitwise operation on negative value | Find defects (-checkers) | Integer conversion overflow | Integer overflow | MISRA C:2012 Rule 10.1 | MISRA C:2012 Rule 10.2 | Possible invalid operation on boolean operand | Shift of a negative value | Shift operation overflow | Unsigned integer conversion overflow | Unsigned integer overflow