|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
Вопрос о типах данных С++02.11.2009, 20:16. Показов 15730. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|