C++ ,数值到字符串 itoa() 函数功能的内部实现

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:08:23
如题。
补充:计算机内部,数据都是用二进制存储,那么对于一个二进制数
11111 来说,它的值是2^0+2^1+2^2+...=31.但是这是人的算法。函数怎么就知道第一个字符是3,第二个字符是1的?

想了很久,有个笨办法就是使计算机也进行十进制运算,首先建立个
0+0=0,。。。9+9=18,共55个加法计算表,建立2^0...2^31共32个表,
就可以计算了,(用字符串匹配的方法逐位计算,进位要自己控制)

当然,2^0...2^31这32个表也是可以用加法来计算得到的。1,2+2,4+4,8+8...这样,即使超过32位的任意大的整数都可以计算得到。(这里的计算均使用字符串匹配,没有溢出问题)

以上是我的个人猜想,请教,c++库函数具体是怎样实现的?我在库函数找不到源码。

char* itoa(int n)
{
char c[24];
int ntemp1, ntemp2;
int i = 0;
ntemp1 = n;
while ((ntemp2 = ntemp1 / 10 != 0) && (ntemp1 %= 10 != 0))
c[i++] = ntemp2 - '0';//如果此数除以10的商和余数均为0,
//则说明已到最高位
c[i] = 0;
return c;
}

其实我觉得应该没怎么复杂,毕竟很多东西已经是底层封装好的,你重新写一些东西,就没必要从底层写起(当然,你从底层写的话,可能效率会好一点,但是优秀的底层封装,高效的上层调用,应该比那个差不到哪去)。
就比如itoa这个函数,就像楼上给一样,利用已经用的东西,直接写就行了。
这也就是高层语言存在的价值了,要不然大家都用汇编好了~~~