|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
Вопрос о типах данных С++02.11.2009, 20:16. Показов 15712. Ответов 42
Метки нет (Все метки)
Всем привет!
У меня путаница вышла со всем этим разнообразием типов данных в С++. Вообще, тип long double должен занимать 3 машинных слова (или 12 байт). Но вот когда я пишу :
И вот я ещё нашел кое-что по типам данных : http://www.cppreference.com/wiki/ru/data_types Как понимать таблицу в пункте "Модификаторы типа"? Если типы long и long int написаны в одной строке, то что...ОНИ ОДИНАКОВЫ??? Спасибо!
0
|
||||||
| 02.11.2009, 20:16 | |
|
Ответы с готовыми решениями:
42
Ошибка в типах данных?! Ошибка в типах данных Различия в типах данных |
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 02.11.2009, 20:31 | |
|
По умолчанию int означает то же, что и long int (раньше, кстати, было short int, потом перепилили). На архитектуре x86 double - самый крутой из встроенных типов с плавающей точкой. long double на этой архитектуре означает то же, что и double (хотя в некоторых вариантах long double - это 10-байтовое число с плавающей точкой). Этот тип никому не должен занимать 3 машинных слова.
1
|
|
|
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
|
|
| 02.11.2009, 20:35 | |
|
1
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 02.11.2009, 21:55 | ||
|
2gromo: Что у тебя за компилятор и что за OC ?
тип long double обычно занимает 10 байт, что соответствует внутреннему формату сопроцессора.
Обычно для 32-bit: sizeof(short int)==2 sizeof(int)==4 sizeof(long)==4 Для 64-bit: sizeof(short int)==2 sizeof(int)==4 sizeof(long)==8
1
|
||
|
|
|
| 02.11.2009, 22:18 | |
|
Аналогично стандарт не накладывает никаких обязательств на реализацию типов float, double и long double. На большинстве архитектур float и double делаются соответственно 32- и 64-битными и работают в стандарте IEEE-754. Что касается long double - то он по разному сделан. Для intel'а как правило sizeof (long double) равен 12 (т.е. 96 бит), при этом 80 бит являются значащими, а 16 бит не используются (нужны как padding для выравнивания). Но некоторые компиляторы не умеют работать с long double и трактуют тип long double как эквивалент double'а (что НЕ противоречит стандарту). Иногда бывает, что это настраивается по опции. Так что присоединяюсь к вопросу предыдущего оратора: что у тебя за компилятор?
1
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||
| 02.11.2009, 22:41 | |||
Да и АНК тоже самое пишет. Выравнивание будет производиться, если ты начнешь структуру делать типа такой:
1
|
|||
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
|
| 02.11.2009, 22:44 | |
|
1
|
|
|
|
||
| 02.11.2009, 22:52 | ||
|
Проверил в борландовском компиляторе - и вправду там размер 10. Если написать структуру из двух long double'ов, то sizeof будет 24. Если структуру из long double и двух char'ов, то sizeof будет 16. Исходя из этого получается что всё-таки отводится 12 байт. При этом то, что sizeof от long double'а выдаётся как 10 - на мой взгляд это косяк
1
|
||
|
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
|
||
| 02.11.2009, 23:34 | ||
|
1
|
||
|
|
|||||||||||||
| 02.11.2009, 23:44 | |||||||||||||
1
|
|||||||||||||
|
125 / 116 / 17
Регистрация: 27.02.2007
Сообщений: 291
|
||||||||
| 03.11.2009, 09:06 | ||||||||
|
Параметрами выравнивания у компилятора Борланда можно управлять опцией -аХХ. По умолчанию стоит -а4, т.е. 10-байтные элементы в структурах выравниваются до 12-и байт. Если поставить -а8, то для следующего примера
Ну и, пожалуй, на этом всё. А то мы и так уже далеко ушли от темы...
0
|
||||||||
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||
| 03.11.2009, 12:33 [ТС] | ||
|
Компилятор у меня Microsoft Visual C++ 6.0.
Я просто сейчас изучаю преобразования типов и в книге говорится о таких типах, о которых в предыдущих главах не было ни слова. Например, цитата из книги:
signed char и unsigned char как о трёх разных типах. И ещё какой-то тип unsigned short int. Я не могу просто понять какие комбинации из ключевых слов можно составлять, чтобы получились типы данных. Добавлено через 15 минут По ссылке http://www.cppreference.com/wiki/ru/data_types Находится таблица со всеми возможными типами данных, но как её прочитать (эту таблицу) я что-то не пойму.
0
|
||
|
|
|
| 03.11.2009, 13:38 | |
|
Цитата - какой-то бред. Либо выдрано из контекста и какие-то слова, не попавшие в цитату, могут прояснить ситуацию. Но я склоняюсь к тому, что это бред
Целые типы бывают знаковые и беззнаковые. Можно записывать по разному (одно из фривольностей языка Си). Для начала считай, что типы бывают следующие (со временем поймёшь, как оно на самом деле). В каждой строке несколько вариантов записи одного и того же типа, на первом месте ставлю наиболее употребительный char, signed char: 8-битное знаковое unsigned char: 8-битное беззнаковое short, short int, signed short, signed short int: 16-битное знаковое unsigned short, unsigned short int: 16-битное беззнаковое int, signed int: 32-битное знаковое unsigned, unsigned int: 32-битное беззнаковое long, long int, signed long, signed long int: 32-битное знаковое для кодов с 32-битным режимом адресации и 64-битное знаковое для кодов с 64-битным режимом адресации unsigned long, unsigned long int: 32-битное беззнаковое для кодов с 32-битным режимом адресации и 64-битное беззнаковое для кодов с 64-битным режимом адресации long long, long long int, signed long long, signed long long int - 64-битное знаковое unsigned long long, unsigned long long int - 64-битное беззнаковое При этом типы "long long" поддерживаются не всеми компиляторами (но подавляющим большинством)
2
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 03.11.2009, 15:36 | |
|
Насчет 64-битных все прогнал - нужно брать int64_t
![]() Или __int64 для Visual Studio.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 03.11.2009, 15:38 | ||
0
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
| 03.11.2009, 15:40 | |
|
Хочешь 64-битный тип - лучше используй int64_t, чем некий long long.
Добавлено через 1 минуту 2Evg: Меня не интересует упаковка long double в структуры, которую ты пытаешься проверить. Меня интересует сколько реально занимает тип long double.
0
|
|
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
| 03.11.2009, 15:42 [ТС] | |
|
Evg
То есть всё это, что ты написал, полностью соответствует той таблице? ======================================== ====================================== P.s Типы "long long" и им подобные у меня не работают. Проверял. Создать переменную такого типа не получается; пишет, что некорректно. (illegal).
0
|
|
| 03.11.2009, 15:42 | |
|
Помогаю со студенческими работами здесь
20
Ошибка в типах данных видимо путаюсь в типах данных Макрос. Ошибка в типах данных Ошибка в типах данных extended и string Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|