【发布时间】:2016-06-30 15:38:13
【问题描述】:
我的代码循环遍历数字并创建该整数的字符数组表示。所以对于像 1234 这样的数字,我得到一个看起来像 {'1', '2', '3', '4'}
部分代码如下:
do {
//print here
c[i++] = (char)(((int)'0')+(num - (num/10)*10 ));
} while ((num = num/10) != 0);
当涉及到 long long int 等大型数据类型时,我遇到了问题:18446612134627563776
我在循环中打印的值是:
18446612134627563776
18446730879801352832
18446742754318731738
...
18446744073709551615
值应该是
18446612134627563776
1844661213462756377
184466121346275637
...
18
1
奇怪的是循环终止了。最后打印的值是18446744073709551615 != 0,所以不确定它为什么会在那里终止。我认为这是我做得不对的数据类型的一些问题。
这是打印语句:
printk("long=%llu sec=%llu , char=%c\n", num, (num/10)*10, (char)(((int)'0')+((num - (num/10)*10 ))));
【问题讨论】:
-
您是否检查过您的数字的大小与旨在容纳它们的数据类型的最大大小?
-
(num/10)*10有什么意义? -
这是
num - (num % 10), @Zaffy 的另一种写法。 -
如上图的数字大小为20位。当我打印 sizeof(long long) 我得到 8,我猜是 8 个字节?
-
@DanielFischer num - (num % 10) 不起作用,我正在尝试下面的地板方法。
标签: c