题目:在数对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2^(字长-1))
的情况。请解释原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。
书本中itoa函数如下:
#include <stdio.h>
#include <string.h>
void itoa(int n, char s[])
{
int i, sign;
if((sign = n) < 0)
n = -n;
i = 0;
do
{
s[i++] = n % 10 + '0';
}
while((n /= 10) > 0);
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
void reverse(char s[])
{
int c, i, j;
for(i = 0, j = strlen(s) - 1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
使用下面的代码对最大负数进行测试
int main()
{
char s1[20] = {'\0'};
itoa(-2147483648, s1);
printf("%s\n", s1);
}
测试结果为: