0

我正在使用 math.h 库,当我运行下面的代码时,我得到 g++ 编译错误,告诉我“警告:隐式常量转换中的溢出”多行。但是,如果我仍然运行可执行文件,它会为我提供合理的数字(尽管出于某种原因,Ints 和 longs 最大值返回相同)。但是如果我使用 cmath 库,所有带符号的数据类型都会给我负值,而无符号的都返回 0....

C++:

/* Calculating data type sizes directly */
/* Shorts - 2 bytes = 2*8(bits/byte) = 16 bits */
smallest_short = -(pow(2, 15));
largest_short = pow(2,15);               // LINE 141
us_smallest_short = 0;
us_largest_short = pow(2, 16);             // LINE 143

/* Ints - 4 bytes = 4*8(bits/byte) = 32 bits */
smallest_int = -(pow(2, 31));
largest_int = pow(2, 31);                  // LINE 147
us_smallest_int = 0
us_largest_int = pow(2, 32);                 // LINE 149

/* Long - 8 bytes = 8*8(bits/byte) = 64 bits */
smallest_long = -(pow(2, 63));
largest_long = pow(2, 63);                 // LINE 153
us_smallest_long = 0;
us_largest_long = pow(2, 64);                   // LINE 155

g++ 编译错误:

datatypesexp.cpp: In function âint main()â:
datatypesexp.cpp:141: warning: overflow in implicit constant conversion
datatypesexp.cpp:143: warning: overflow in implicit constant conversion
datatypesexp.cpp:147: warning: overflow in implicit constant conversion
datatypesexp.cpp:149: warning: overflow in implicit constant conversion
datatypesexp.cpp:153: warning: overflow in implicit constant conversion
datatypesexp.cpp:155: warning: overflow in implicit constant conversion

我应该坚持使用 math.h 吗?如何解决警告?

此外,如果我使用 math.h 运行 exec,忽略警告,我签名的“最大整数”和最大长整数都返回 2147483647。

虽然无符号,但它们都返回 4294967295。但多头应该返回更大的值......

我该如何补救?

4

2 回答 2

0

正值溢出,因为在刻度的那一侧有一个零可以容纳,让你少一个值。例如,pow(2, 31)是 2,147,483,648(在赋值之前表示为双精度数),但在这种情况下最大的有符号整数是 2,147,483,647。

于 2013-01-17T06:59:49.657 回答
0

无符号 n 位变量可以容纳的最大值是 2^n-1,而不是 2^n。

于 2013-01-17T06:59:54.160 回答