Основные типы 2.1
i = l = f = d = 100/3 | |
(i=(l=(f=(d=(100/3))))) | Вычисляем выражение справа налево. |
(i=(l=(f=(d=33)))) | Так как оба числа 100 и 3 - целые, то операция деления есть деление целых, поэтому у частного отбрасывается дробная часть. |
(i=(l=(f=(double)33))) и d=33 | Напоминаем, что значение, вырабатываемое операцией присваивания, есть значение правой части, преобразованное к типу, задаваемому левой частью. |
(i=(l=(float)33)) и f=33 (i=(long)33) и l=33 (integer)33 и i=33 33 целое |
Основные типы 2.2
d = f = l = i = 100/3 (d=(f=(l=(i=(100/3))))) (d=(f=(l=(integer)33))) и i=33 (d=(f=(long)33)) и l=33 (d=(float)33) и f=33 (double)33 и f=33 33 двойной точности
Основные типы 2.3
i = l = f = d = 100/3. (i=(l=(f=(d=(100/3.))))) | |
(i=(l=(f=(double)33.333333))) и d=33.333333 | Число 3. двойной точности, поэтому и частное будет двойной точности. |
(i=(l=(float)33.333333)) и f=33.33333x | В этой программе в printf используется формат %.8g, который задает печать числа с точностью до 8 значащих цифр. Но на самом деле на машинах PDP-1 и VAX максимальная точность для чисел с плавающей точкой не более 7 значащих цифр, так что точность до 8 цифр недостижима. Конечно, количество значащих цифр в числе зависит от машины. |
(i=(long)33.33333x))и l=33 | Преобразование чисел с плавающей точкой в длинные целые происходит с помощью отбрасывания дробной части. |
(integer)33 и i=33 33 целое |
Основные типы 2.4
d = f = l = i = (double)100/3 | |
(d=(f=(l=(i=((double)100)/3))))) | Заметьте, что операция приведения имеет более высокий приоритет, чем операция /. |
(d=(f=(l=(i=(100./3))))) (d=(f=(l=(integer)33.333333))) и i=33 (d=(f=(long)33)) и l=33 (d=(float)33) и f=33 (double)33 33 двойной точности |
Основные типы 2.5
i = l = f = d = (double)(100000/3) (i=(l=(f=(d=((double)(100000/3)))))) | |
(i=(l=(f=(d=(double)33333)))) | Операндом для операции приведения служит частное от деления 100000 на 3. |
(i=(l=(f=(double)33333))) и d=33333 (i=(l=(float)33333)) и f=33333 (i=(long)33333) и l=33333 (integer)33333 и i=33333 или переполнение | Число 33333 нельзя представить в виде 16-разрядного целого со знаком. Многие реализации языка спокойно допускают и переполнение, и потерю значимости числа. Если ваши вычисления могут в принципе превзойти границы, присущие данной машине, то будет разумным вставить явные проверки на попадание чисел в отводимый диапазон. |
33333 целое или переполнение |