zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

练习 3-4 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2字长-1的i情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。

机器 处理 函数 修改 运行 解释 编写 最大
2023-09-11 14:22:19 时间

C语言程序设计(第二版) 练习3-4 个人设计

练习 3-4 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2字长-1的i情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。

代码块

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void itoa(int n, char s[]);
void reverse(char s[]);
int main()
{
	int num;
	char str[100];
	num=-2147483648;
	itoa(num, str);
	puts(str);
	system("pause");
	return 0;
}
void itoa(int n, char s[])
{
	int i, sign;
	if ((sign=n)<0)
		n=-(n+1);
	i=0;
	do{
		if (i==0)
			s[i++]=n%10+'0'+1;
		else
			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;
	}
}