23

如何在 c++ 中从 long long 转换为 int 和其他方式?还有什么是 long long 的属性,尤其是它的最大尺寸,提前谢谢..

4

3 回答 3

29

int保证至少为 16 位宽。在现代系统上,它最常见的是 32 位(即使在 64 位系统上)。

long long,最初在 C++ 中不存在,保证至少为 64 位宽。它几乎总是64位宽。

将值从一种整数类型转换为另一种整数类型的常用方法是简单地分配它。任何必要的转换都将隐式完成。例如:

int x = 42;
long long y = 9223372036854775807;
y = x; // implicitly converts from int to long long
x = y; // implicitly converts from long long to int

对于窄化转换,目标类型不能代表源类型的所有值,存在溢出风险;int可能或可能无法保持该值9223372036854775807。在这种情况下,结果是实现定义的。最可能的行为是丢弃高位;例如,转换9223372036854775807int可能会产生2147483647。(这在十六进制中更清楚;值分别是0x7fffffffffffffff0x7fffffff。)

如果需要显式转换,可以使用cast。C 风格的转换使用括号中的类型名称:

(long long)x

或者您可以使用 C++ 风格static_cast

static_cast<long long>(x)

这比 C 风格的强制转换更安全,因为它受限于可以操作的类型。

于 2015-01-23T02:02:51.953 回答
18

long long 类型通常为 64 位。

类型 int 可能是 32 位,但不是在所有机器上。

如果您将 int 转换为 long long,您可以这样做

my_long_long = (long long) my_int

一切都会好起来的。如果你去另一个方向,比如

my_int = (int) my_long_long

而 int 小于 64 位,将无法保存所有信息,因此结果可能不正确。

于 2012-08-20T01:50:54.427 回答
3

int 的大小只有 2 个字节,而另一个通常大于 int。因此,如果您希望将 long 转换为 int,那么您最终会丢失信息。但在不牺牲信息正确性的情况下,另一种方式是可能的。假设a是 long 类型并且b是 int 类型。然后 int 到 long 转换:a=(long)b;. 对于其他方式:b=(int)a;.

于 2012-08-20T01:34:08.933 回答