我对发布我的代码犹豫不决,因为这是针对学校作业的,但基本上我需要遍历可能非常大的uint64_t
。
所以,我的值基本上可能是10个字符。它最初是一个int
,代码部分有效(但没有完成它应该完成的输出)但是我得到了错误"warning: integer constant is so large that it is unsigned"
。
然后我将int
更改为uint64_t
(它乘以10),它会给我一个浮点异常。
没有代码的任何见解?
编辑:添加一些代码...
uint64_t number = 1U;
...
for (int x = 0; x < y; x++) {
number *= 10;
}
^这给了我浮点异常。
不确定这是否足够有用。
答案 0 :(得分:0)
默认情况下,整数文字已签名。如果在文字上使用U
后缀,则告诉编译器使其无符号,例如123456789U
。这应该清除关于常数太大的警告。或者,您可以使用UINT64_C()
中的<stdint.h>
宏。
如果没有看到某些代码,很难知道造成FPE的原因。
答案 1 :(得分:0)
您是否检查了for
循环执行了多少次?在for
循环中,number
以指数比率增加。我写了一个小程序来显示情况。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdint.h>
4
5 #define MAXLOOP 100
6
7 int
8 main(void)
9 {
10 uint64_t number = 1U;
11 int i;
12
13 for(i = 0; i < MAXLOOP; ++i){
14 number *= 10;
15 printf("%d\t%lu\n", i, number);
16 }
17
18 return 0;
19 }
20
输出结果为:
0 10
1 100
2 1000
3 10000
4 100000
5 1000000
6 10000000
7 100000000
8 1000000000
9 10000000000
10 100000000000
11 1000000000000
12 10000000000000
13 100000000000000
14 1000000000000000
15 10000000000000000
16 100000000000000000
17 1000000000000000000
18 10000000000000000000
19 7766279631452241920 <--- overflow, uint64_t can store 18,446,744,073,709,551,616 as its max value
20 3875820019684212736
21 1864712049423024128
22 200376420520689664
23 2003764205206896640
24 1590897978359414784
25 15908979783594147840
26 11515845246265065472
27 4477988020393345024
28 7886392056514347008
29 5076944270305263616
30 13875954555633532928
31 9632337040368467968
32 4089650035136921600
33 4003012203950112768
34 3136633892082024448
35 12919594847110692864
36 68739955140067328
37 687399551400673280
38 6873995514006732800
39 13399722918938673152
40 4870020673419870208
41 11806718586779598848
42 7386721425538678784
43 80237960548581376
44 802379605485813760
45 8023796054858137600
46 6450984253743169536
47 9169610316303040512
48 17909126868192198656
49 13070572018536022016
50 1578511669393358848
51 15785116693933588480
52 10277214349659471872
53 10538423128046960640
54 13150510911921848320
55 2377900603251621888
56 5332261958806667264
57 16429131440647569408
58 16717361816799281152
59 1152921504606846976
60 11529215046068469760
61 4611686018427387904
62 9223372036854775808
63 0
64 0
65 0
66 0
67 0
68 0
69 0
70 0
71 0
72 0
73 0
74 0
75 0
76 0
77 0
78 0
79 0
80 0
81 0
82 0
83 0
84 0
85 0
86 0
87 0
88 0
89 0
90 0
91 0
92 0
93 0
94 0
95 0
96 0
97 0
98 0
99 0
我认为您很容易理解。: - &gt;