преобразование из long long в int и наоборот в c++

Как конвертировать из long long в int и наоборот в c++ ?? также каковы свойства long long, особенно его максимальный размер, заранее спасибо ..

3 ответов


тип long long обычно составляет 64 бита.

тип int, вероятно, будет 32 бит, но не на всех машинах.

Если вы бросили int в длинный длинный, вы можете сделать

my_long_long = (long long) my_int

и это будет просто замечательно. Если вы идете в другом направлении, как

my_int = (int) my_long_long

и int меньше 64-бит, он не сможет удерживать всю информацию, поэтому результат может быть неправильным.


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. В этом случае, результат реализация-определено. Наиболее вероятным поведением является то, что биты высокого порядка отбрасываются; например, преобразование 9223372036854775807 to int может дать 2147483647. (Это яснее в шестнадцатеричном; значения 0x7fffffffffffffff и 0x7fffffff, соответственно.)

Если вам нужно преобразовать явно, вы можете использовать cast. Приведение в стиле C использует имя типа в круглых скобках:

(long long)x

или вы можете использовать C++-style static_cast:

static_cast<long long>(x)

что несколько безопаснее, чем c-стиль, потому что он ограничен, в каких типах он может работать.


размер int составляет всего 2 байта, тогда как другой обычно больше, чем int. Поэтому, если вы хотите конвертировать long в int, вы потеряете информацию. Но другой путь возможен без ущерба для достоверности информации. Предположим a имеет длинный тип и b имеет тип int. Затем int в Long covertion:a=(long)b; . Для другого пути:b=(int)a;.