Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.67
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

Вопрос о типах данных С++ - C++

02.11.2009, 20:16. Просмотров 7027. Ответов 42
Метки нет (Все метки)

Всем привет!
У меня путаница вышла со всем этим разнообразием типов данных в С++.
Вообще, тип long double должен занимать 3 машинных слова (или 12 байт).
Но вот когда я пишу :
C++
1
2
3
4
5
6
7
#include <iostream.h>
#include <cstddef>
void main() {
    long double qq=10;
    size_t qwer=sizeof qq;
    cout <<qwer <<endl;
}
то в результате выводится значение 8. А почему???

И вот я ещё нашел кое-что по типам данных :
http://www.cppreference.com/wiki/ru/data_types
Как понимать таблицу в пункте "Модификаторы типа"?
Если типы long и long int написаны в одной строке, то что...ОНИ ОДИНАКОВЫ???

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 20:16     Вопрос о типах данных С++
Посмотрите здесь:
видимо путаюсь в типах данных C++
C++ Вычислить значение выражения при различных вещественных типах данных
Вычислить значение выражения при различных вещественных типах данных C++
C++ Вычислить значение выражения при различных вещественных типах данных (float и double)
C++ Запутался в типах
C++ Наследование в шаблонных типах
C++ Распаковка parameter pack в наследуемых типах
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 15:43     Вопрос о типах данных С++ #21
Цитата Сообщение от odip Посмотреть сообщение
Хочешь 64-битный тип - лучше используй int64_t, чем некий long long.
Человек не спрашивал что лучше. Он хочет разобраться с базовыми типами языка

Цитата Сообщение от odip Посмотреть сообщение
2Evg: Меня не интересует упаковка long double в структуры, которую ты пытаешься проверить.
Меня интересует сколько реально занимает типа long double.
Вопрос филосовский. Ибо одиночная переменная до фонаря сколько занимает, если при любом раскладе компилятор строит код, который читает-пишет только с 80 битами. Реально выдерживать соглашения нужно только в массивах и структурах.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:45     Вопрос о типах данных С++ #22
Человек не спрашивал что лучше. Он хочет разобраться с базовыми типами языка
long long - не базовый тип.
int64_t - есть по стандарту C99.
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 15:47     Вопрос о типах данных С++ #23
Цитата Сообщение от gromo Посмотреть сообщение
То есть всё это, что ты написал, полностью соответствует той таблице?
Не знаю. Хз на кого рассчитана та статья, но без поллитры и валидола я не в состоянии её читать

Цитата Сообщение от gromo Посмотреть сообщение
P.s Типы "long long" и им подобные у меня не работают. Проверял. Создать переменную такого типа
не получается; пишет, что некорректно. (illegal).
Значит твой компилятор их не поддерживает (ибо в старых стандартах этого типа точно нет)

Добавлено через 51 секунду
Цитата Сообщение от odip Посмотреть сообщение
long long - не базовый тип.
Базовый, но не стандартный

Цитата Сообщение от odip Посмотреть сообщение
int64_t - есть по стандарту C99.
На 100% не уверен, но по-моему это typedef
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
03.11.2009, 15:50     Вопрос о типах данных С++ #24
А еще обратите внимание, коллеги, что тип int64_t есть в Стандарте C99, но отсутствует в Стандарте C++03.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
03.11.2009, 15:52     Вопрос о типах данных С++ #25
Цитата Сообщение от Evg Посмотреть сообщение
На 100% не уверен, но по-моему это typedef
Так и есть.
Код
[serg@localhost ~]$ cpp /usr/include/stdint.h | grep int64_t
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 15:57  [ТС]     Вопрос о типах данных С++ #26
Цитата Сообщение от Evg Посмотреть сообщение
Не знаю. Хз на кого рассчитана та статья, но без поллитры и валидола я не в состоянии её читать
Я сравнил, все сходится. А то когда я сам начал изучать, то в голове после этих типов образовалась каша. Но теперь, когда мне объяснил знающий человек, что-то прояснилось.
СПАСИБО ОГРОМНОЕ!!! ПОМОГЛИ!!!!!!!
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:59     Вопрос о типах данных С++ #27
На 100% не уверен, но по-моему это typedef
А какая разница что там ?
Главное что он точно 64-битный.
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 16:03     Вопрос о типах данных С++ #28
Цитата Сообщение от Gravity Посмотреть сообщение
Так и есть.
Код
[serg@localhost ~]$ cpp /usr/include/stdint.h | grep int64_t
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
Я имел в виду "не уверен, что int64_t" - встроенный в ЯЗЫК C99 тип. То, что где-то есть typedef с таким именем не даёт ответа на это

Цитата Сообщение от odip Посмотреть сообщение
А какая разница что там ?
Главное что он точно 64-битный.
1. По второму кругу: человек спрашивал не это, он хотел разобраться с базовыми типами. Наши высокоинтелектуальные дискуссии про то, как программировать правильно, ему пока не интересны, т.к. он ещё не освоил базу
2. Если в языке нет 64-битного базового типа, то какая в пень разница, есть typedef для int64 или нет - всё равно над переменными этого типа нельзя будет строить арифметику
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 16:15     Вопрос о типах данных С++ #29
Я имел в виду "не уверен, что int64_t" - встроенный в ЯЗЫК C99 тип. То, что где-то есть typedef с таким именем не даёт ответа на это
http://ru.wikipedia.org/wiki/Printf
Второй стандарт языка Си (1999) предусматривает расширенный набор псевдонимов целочисленных типов данных intN_t, uintN_t, int_leastN_t, uint_leastN_t, int_fastN_t, uint_fastN_t (где N — требуемая разрядность), intptr_t, uintptr_t, intmax_t, uintmax_t.
...

Теперь уверен ?
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 16:29     Вопрос о типах данных С++ #30
Если слово "псевдоним" трактуется как "typedef или define", то можно абсолютно точно сказать, что int64_t НЕ является встроенным типом языка (в чём я почти не сомневался, но мало ли чего порешили разработчики стандарта)
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 17:54  [ТС]     Вопрос о типах данных С++ #31
Извините за тупость, но у меня ещё такой вопрос:
Если где-то говорится, например тип int или short, или long, то если явно не указано, что они "unsigned" подразумевается, что они "signed"?
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 18:06     Вопрос о типах данных С++ #32
Цитата Сообщение от gromo Посмотреть сообщение
Если где-то говорится, например тип int или short, или long, то если явно не указано, что они "unsigned" подразумевается, что они "signed"?
В стандарте это остаётся на усмотрение разработчику компилятора, но большинство "нормальных" компиляторов по умолчанию рассматривают тип как знаковый. В случаях для сигнальных процессоров и т.п. сие может быть по другому
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 18:28  [ТС]     Вопрос о типах данных С++ #33
Ну, я когда пишу

C++
1
2
3
4
5
#include <iostream.h>
void main() {
    int ival=-5;
    cout <<ival <<endl;
}
на экран выводится -5. После компиляции, ошибок и предупреждений не выдаёт.

Значит, по умолчанию целые типы рассматриваются как знаковые?
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 18:31     Вопрос о типах данных С++ #34
А я тебе что писал?
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 18:37  [ТС]     Вопрос о типах данных С++ #35
Ну я просто подумал, а вдруг мой компилятор исключение из правил? Ну мало ли...
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 18:43     Вопрос о типах данных С++ #36
да не... не на столько
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 18:52  [ТС]     Вопрос о типах данных С++ #37
Ну, спасибо за всё!
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
03.11.2009, 18:54     Вопрос о типах данных С++ #38
Цитата Сообщение от Evg Посмотреть сообщение
В стандарте это остаётся на усмотрение разработчику компилятора, но большинство "нормальных" компиляторов по умолчанию рассматривают тип как знаковый. В случаях для сигнальных процессоров и т.п. сие может быть по другому
Смотря какой стандарт. В C++97 и C99 они явно знаковые (кроме char, который не равен ни signed char, ни unsigned char и может быть либо знаковым, либо беззнаковым)
C++ 97, 3.9.1 Fundamental types
2 There are four signed integer types: "signed char", "short int",
"int", and "long int." In this list, each type provides at least as
much storage as those preceding it in the list. Plain ints have the
natural size suggested by the architecture of the execution
environment15) ; the other signed integer types are provided to meet
special needs.
C99, 6.2.5 Types
Здесь, кстати, и long long есть
4 There are five standard signed integer types, designated as signed char, short
int, int, long int, and long long int. (These and other types may be
designated in several additional ways, as described in 6.7.2.) There may also be
implementation-defined extended signed integer types.28) The standard and extended
signed integer types are collectively called signed integer types.29)
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
03.11.2009, 18:55     Вопрос о типах данных С++ #39
Somebody, просто в более поздние стандарты, судя по всему, включают то, что постфактум уже и так делается несколько лет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2009, 23:23     Вопрос о типах данных С++
Еще ссылки по теме:
C++ Вопрос по вводу данных
Опишите промежутки чисел и символов при разных типах C++
Вопрос по передаче данных в функции C++
C++ Вычислить значение выражения при различных вещественных типах данны
Глупый вопрос по типу данных Variant C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 23:23     Вопрос о типах данных С++ #40
можно абсолютно точно сказать, что int64_t НЕ является встроенным типом языка (в чём я почти не сомневался, но мало ли чего порешили разработчики стандарта).
Не пойму к чему ты все время клонишь.
Тип есть, пользоваться им можно.

Добавлено через 1 минуту
Куда его реально определили разработчики компилятора - это уже тебя сильно мучить не должно.

Добавлено через 47 секунд
long long есть
Только он может совпадать с обычным long по размеру

Добавлено через 58 секунд
Visual Studio 2005 и Visual Studio 2008 НЕ ПОДДЕРЖИВАЮТ C99.
Насчет VS2010 не знаю - релиз еще не вышел, пробовать не хочу
Yandex
Объявления
03.11.2009, 23:23     Вопрос о типах данных С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru