Как конвертировать из long long в int и наоборот в С++? также каковы свойства длинного длинного, особенно его максимального размера, спасибо заранее..
Конвертировать из long long в int и наоборот в С++
Ответ 1
Тип long long обычно составляет 64 бита.
Тип int может быть 32 бита, но не на всех машинах.
Если вы наложили int на долгое время, вы можете сделать
my_long_long = (long long) my_int
и все будет хорошо. Если вы идете в другую сторону, например
my_int = (int) my_long_long
а int меньше, чем 64-битные, он не сможет хранить всю информацию, поэтому результат может быть неправильным.
Ответ 2
int
гарантируется ширина не менее 16 бит. В современных системах это чаще всего 32 бита (даже в 64-битных системах).
long long
, который первоначально не существовал в С++, гарантированно будет иметь ширину не менее 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
в int
может привести к 2147483647
. (Это яснее в шестнадцатеричном формате, значения 0x7fffffffffffffff
и 0x7fffffff
, соответственно.)
Если вам нужно явно преобразовать, вы можете использовать трансляцию. Сценарий в стиле C использует имя типа в круглых скобках:
(long long)x
Или вы можете использовать стиль С++ static_cast
:
static_cast<long long>(x)
что несколько безопаснее, чем приведение в стиле C, потому что оно ограничено, в каких типах он может работать.
Ответ 3
Размер int составляет всего 2 байта, а другой - больше, чем int. Поэтому, если вы хотите преобразовать long в int, вы потеряете информацию. Но другой способ возможен, не жертвуя правильностью информации.
Предположим, что a
имеет длинный тип и b
имеет тип int. Затем int to long covertion: a=(long)b;
. Другим способом: b=(int)a;
.