我正在使用Frama-C正式规范两种方法:
/*@ requires n >= 0;
ensures result >= 0;
terminates n == 0;
*/
int decimal_binary(int n)
{
int rem, i = 1, binary = 0;
while (n != 0)
{
rem = n % 2;
n /= 2;
binary += rem * i;
i *= 10;
}
return binary;
}
/*@ requires n >= 0;
ensures result >= 0;
terminates n == 0;
*/
int binary_decimal(int n)
{
int decimal = 0, i = 1, rem;
while (n != 0)
{
rem = n % 10;
n /= 10;
decimal += rem * i;
i = i << 1;
}
return decimal;
}
以上就是我目前的工作后得到的。我不知道如何描述变量和循环。