преобразование из 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;
.