Преобразование между числовыми типами одного типа

я читал http://www.cplusplus.com/doc/tutorial/typecasting/. Это говорит о том, что:

  • В противном случае, если преобразование происходит между числовыми типами одного типа
    (целое-целое или плавающее-плавающее), преобразование допустимо,
    но значение зависит от реализации (и не может быть переносимым).

Но я действительно не понял, что означает вышеприведенная цитата? Кто-нибудь, пожалуйста, объясните это на простом примере? Почему преобразование между числовым типом одного и того же вида приводит к конкретному значению реализации? Какова причина?

5

Решение

Давайте рассмотрим следующий пример:

    long long int lli = 5000000000;
long int li;
int i;
li = lli;
i = li;

Можете ли вы предсказать значения lli, li а также i? Или будь li а также i имеют одинаковое значение?

Ответ — значения зависят от количества байтов, выделенных для каждого типа!
То есть для некоторых случаев int равно long int, для других long int равно long long int, а вообще longНекоторые типы могут быть длиннее. Подобный (в смысле объема памяти) для float, double а также long double,

5

Другие решения

Фрагмент относится к сужающимся преобразованиям между целочисленным типом и типом с плавающей запятой соответственно. То есть в нем говорится, что, хотя преобразование между целочисленными типами или между типами с плавающей запятой допустимо, результирующее значение будет определяться реализацией.

В качестве примера рассмотрим следующий фрагмент кода:

#include <iostream>
#include <limits>

int main() {
long long lgm = std::numeric_limits<long long>::max();
std::cout << std::hex << lgm << std::endl;
int i = lgm;
std::cout << std::hex << i << std::endl;

long double ldb = std::numeric_limits<long double>::max();
std::cout << std::hex << ldb << std::endl;
double db = ldb;
std::cout << std::hex << db << std::endl;
}

Выход:

7fffffffffffffff
ffffffff
1.18973e+4932
inf

Как вы можете увидеть максимальное значение long long целое число превышает емкость простого целого числа. Однако вы можете конвертировать long long для int (т. е. преобразование действительно), но из-за того, что int не может содержать максимальное значение long long не может быть точного преобразования. Таким образом, значение полученного int оставлено на усмотрение реализации. То же самое верно для преобразования между long double а также double,

1

По вопросам рекламы ammmcru@yandex.ru