c语言数字转字符串
对下面代码的一些细节,解释下为什么那么做。 1. char buf[sizeof(int) * 8 + 1] = ""; 这个buf的作用是缓存中间结果,长度没有写死。好处是不同的平台上这段代码都可以执行。 2. if (base < 2 || base > 36) 该判断检查用户传入的进制数是否合法。base < 2 主要过滤负数和0和1。base > 36的意义是在超过10进制的数里,是用字母a表示10的。以此类推z可以表示36。在只使用ascii字符表示大于10的数时,最大的表示值是36,超过这个值就不能表示。 3. uval = -val; 这各写法可以避免一个潜在的坑。当val为int值为INT_MIN时 -val会溢出。表象为-val 的值还是INT_MIN,还是个负数 4.至于为什么用一个无符号整数与一个>0的int进行整除与取余 uval % base uval /= base 因为c语言的标准里没有规定x / y当有一个值为负数时,结果该向x坐标轴的左侧靠近(向0取整) 还是向侧靠近(负无穷) 它只规定了 (x / y) * y + (x % y) = x -14 /5 的结果可以是 -2 或者 -3 至为正数为啥没有两个结果。本人只是用了几个值进行了验证。。 好了贴代码: #include <stdio.h> #include <limits.h>