КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перетворення типів при присвоюванні
В операціях присвоювання тип значення, що присвоюється, перетворюється до типу змінної, що одержує це значення. У мові С++ допускаються перетворення при присвоюванні між цілими і дійсними типами, навіть у випадку, коли перетворення спричиняє втрату інформації.
Перетворення знакових цілих типів. Методи виконання перетворень залежать від типів. Наприклад, знакове ціле (sіgned іnt) перетворюється до короткого знакового цілого (short sіgned іnt) за допомогою усікання старших бітів. Коротке знакове ціле (short sіgned іnt) перетворюється до довгого знакового цілого (long sіgned іnt) шляхом розмноження знака вліво. Перетворення знакових цілих (sіgned іnt) до дійсних величин, відбувається без втрати інформації, за винятком можливої втрати деякої точності, коли перетворюються величини long у float. При перетворенні знакового цілого (sіgned іnt) до беззнакового цілого (unsіgned іnt), знакове ціле перетворюється до розміру беззнакового цілого і результат інтерпретується як беззнакова величина. Таблиця 6.1.
Зауваження: тип іnt еквівалентний або типові short, або типові long у залежності від реалізації. Перетворення значень типу іnt відбувається як для типу short або як для типу long, в залежності від того, що підходить.
Перетворення беззнакових цілих типів. Беззнакове ціле перетворюється до короткого беззнакового або знакового цілого шляхом усікання старших бітів. Беззнакове ціле перетвориться до довгого беззнакового або знакового цілого шляхом розмноження нуля. Беззнакові цілі перетворюється до дійсних величин шляхом перетворення до найближчого знакового цілого того ж самого розміру, а потім перетворення цієї знакової величини до дійсної величини. Коли беззнакове ціле перетвориться до знакового цілого того ж розміру, то стан бітів не міняється. Однак, значення цього представлення зміниться, якщо був встановлений знаковий біт. Таблиця 6.2.
Зауваження: тип unsigned int еквівалентний або типові unsigned short, або типові unsigned long у залежності від реалізації. Перетворення значень типу unsigned іnt відбувається як для типу unsigned short або як для типу unsigned long, в залежності від того, що підходить. Перетворення дійсних типів Величина float перетворюється до double, не міняючись у значенні. Величини double, перетворені до float, представляються точно, якщо це можливо. Якщо значення занадто велике для float, то точність губиться. Дійсні типи перетворюються до цілих типу long. Перетворення до інших цілих типів виконується як для long. Дробова частина дійсної величини відкидається при перетворенні до long; якщо результат занадто великий для long, то результат перетворення невизначений.
Таблиця 6.3.
Перетворення адресних типів Вказівник на величину одного типу може бути перетворений до вказівника на величину іншого типу. Результат може бути, однак, невизначеним через відмінність у вимогах до вирівнювання і розмірів пам'яті. У деяких реалізаціях є спеціальні ключові слова near, far, huge, що модифікують розмір вказівників у програмах. Значення вказівника може бути перетворене до цілої величини. Шлях перетворення залежить від розміру вказівника і розміру цілого типу наступним чином: - якщо вказівник має той самий або менший розмір, чим цілий тип, то вказівник перетвориться точно так само як беззнакове ціле, за винятком того, що він не може бути перетворений до дійсної величини; - якщо розмір вказівника менший ніж розмір цілого типу, то вказівник спочатку перетворюється до вказівника з тим самим розміром, що й цілий тип, і потім перетворюється до цілого типу. Метод перетворення вказівника до більш довгого вказівника залежить від реалізації. Цілий тип може бути перетворений до адресного типу. Якщо цілий тип того ж самого розміру, що й адресний, то виконується просте перетворення до виду вказівника (беззнакового цілого). Якщо розмір цілого типу відмінний від розміру адресного типу, то цілий тип спочатку перетворюється до розміру вказівника, використовуючи методи перетворення даних, і потім отримане значення представляється як вказівник. Цілочисельний константний вираз зі значенням 0 або він же, але приведений до типу voіd *, може бути перетворений у вказівник будь-якого типу операторами приведення, присвоювання і порівняння. Результатом буде NULL-вказівник, що дорівнює будь-якому іншому NULL-вказівникові того ж типу, але не дорівнює ніякому вказівникові на реальний об'єкт або функцію. Вказівник може також перетворюватися в voіd * і назад, значення вказівника при цьому не змінюється. Вказівник може неявно перетворюватися в значення типу bool, при цьому ненульовий вказівник перетвориться в true, а нульовий у false. Присвоювання вказівників допускається в двох випадках: · вказівникам типу voіd*: · якщо тип вказівників праворуч і ліворуч від операції присвоювання той самий.
Таким чином, неявне перетворення виконується тільки до типу voіd*. Значення 0 неявно перетворюється до вказівника на будь-який тип. Перетворення інших типів Згідно з визначенням типу enum випливає, що величини enum є величинами типу іnt. Тому перетворення в тип enum або з типу enum здійснюється так само, як для іnt-типів. Неприпустимі перетворення об’єктів типу структура або об'єднання.
Дата добавления: 2014-01-05; Просмотров: 547; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |