Операция с использованием целочисленного размера вместо точности может вызвать неопределенное поведение
Этот дефект возникает, когда целочисленное выражение использует целочисленный размер в операции, которая превышает целочисленную точность. В некоторых архитектурах размер целого числа в памяти может включать биты со знаком и заполнением. На этих архитектурах целочисленный размер больше точности, которая является просто количеством бит, которые представляют значение целого числа.
Использование размера целого числа в операции с целочисленной точностью может привести к целочисленному переполнению, переносу или неожиданным результатам. Для образца беззнаковое целое число может храниться в памяти в 64 битах, но использует только 48 битов, чтобы представлять его значение. Операция с 56 битами левого сдвига для этого целого числа является неопределенным поведением.
Предположение, что размер целого числа равен его точности, также может привести к проблемам переносимости программы между различными архитектурами.
Не используйте размер целого числа вместо его точности. Чтобы определить целочисленную точность, реализуйте стандартную программу точных расчетов или используйте функцию builtin, такую как __builtin_popcount().
| Группа: Численный |
| Язык: C | C++ |
| По умолчанию: Off |
Синтаксис командной строки
: 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