Ева дает наиболее точный ответ из исходного контекста, где a
, внешняя переменная, находится в диапазоне [0..255]
, а именно, что b
равно 0
, а c
может быть либо 0
или 1
.
Если вы хотите узнать, что происходит, панель Values
в нижней части графического интерфейса пользователя (запущена с frama-c-gui -eva file.c
) - это путь.Его использование описано в разделе 4.3 руководства пользователя Eva , но в основном, если вы щелкаете по любому (под) выражению в представлении нормализованного кода (левый буфер), абстрактное значение, вычисленное Eva для этоговыражение в этой точке будет отображаться на панели.
В вашем примере у нас есть следующие промежуточные значения для вычисления b
:
a
-> [0..255]
(int)a
-> [0..255]
(неявное преобразование арифметического операнда) (int)a >> 15
-> {0}
(только первые 8 битов могут быть не 0
) (int)a >> 15 & 1
-> {0}
(первый аргумент 0
, побитовый и также 0
}
Для c
, первые два шагаидентичны, но тогда у нас есть
(int)a >> 0
-> [0..255]
(нет, у нас те же значения, что и (int)a
) ((int)a >> 0) & 1
->{0; 1}
(в интервале [0..255]
мы имеем нечетные и четные значения, следовательно, результат побитовый и может быть либо 0
, либо 1
).