问题描述
在下面的超级高级代码中,我尝试从大数字中减去下一个值。
我不明白为什么这会给我错误的结果。
我正在使用cygwin gcc。
$ gcc --version
给了我gcc (GCC) 6.4.0
uint64_t val = 0xFFFFFFFFFFFFFFFFULL; // 0xFF FF FF FF FF FF FF FF ULL = 8 bytes
printf("[ 0] %ju\n",val);
printf("[ 1] %ju\n",val -= 1e19);
printf("[ 2] %ju\n",val -= 8e18);
printf("[ 3] %ju\n",val -= 4e17);
printf("[ 4] %ju\n",val -= 4e16);
printf("[ 5] %ju\n",val -= 6e15);
printf("[ 6] %ju\n",val -= 7e14);
gcc -Wall main.c -o main.exe && ./main.exe
给我的结果如下:
[ 0] 18446744073709551615
[ 1] 8446744073709551616 <- here and below should be 5
[ 2] 446744073709551616
[ 3] 46744073709551616
[ 4] 6744073709551616
[ 5] 744073709551616
[ 6] 44073709551616
您是否注意到最后一位?其他数字也发生了类似的情况,但我不知道原因...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)