C++十进制出生年份转二进制结果异常问题求助
问题原因分析
- 核心问题是
i变量的类型溢出:你声明的i是int类型,32位int的取值上限通常是2147483647。2001的二进制有11位,循环过程中i会累乘到10^10 = 10000000000,远大于int的最大值,发生整数溢出后i的值变成异常数值,最终计算出来的bin自然出错。 - 日、月转换正常是因为这两个数值最大只有31,二进制最多5位,
i最大只到10000,远没有超出int的取值范围,所以不会触发溢出问题。
修复方案
只需要把i的类型修改为long long即可,修改后的代码片段如下:
{ long long i, temp, bin; // 把i的类型从int改为long long i = 1; bin = 0; printf("Number %d in binary: \n", year); while (year > 0) { temp = year % 2; year /= 2; bin += temp * i; i *= 10; } printf("%lld\n\n",bin); }
内容的提问来源于stack exchange,提问作者xemxx
相关产品推荐
相关产品推荐

