Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/82: Рейтинг темы: голосов - 82, средняя оценка - 4.95
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225

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

02.11.2009, 20:16. Показов 16254. Ответов 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 написаны в одной строке, то что...ОНИ ОДИНАКОВЫ???

Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2009, 20:16
Ответы с готовыми решениями:

Ошибка в типах данных?!
Есть строка вида 3е-07 15, разбиваю split и записываю значение в ячейку. Но записывается значение 3е-02. В чем мб проблема?! Добавлено...

Ошибка в типах данных
Нужно составить условие вида: if abs(c-m) = abs(m-a) and abs(d-k)= abs(k-b)then writeln ('Точка находится внутри прямоугольника') else...

Различия в типах данных
Создаю БД MySQL 5.5. Для текстовых полей я нашел 4 типа: -char; -text; -varchar. Объясните подробно отличия этих типов. Для...

42
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 15:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от odip Посмотреть сообщение
Хочешь 64-битный тип - лучше используй int64_t, чем некий long long.
Человек не спрашивал что лучше. Он хочет разобраться с базовыми типами языка

Цитата Сообщение от odip Посмотреть сообщение
2Evg: Меня не интересует упаковка long double в структуры, которую ты пытаешься проверить.
Меня интересует сколько реально занимает типа long double.
Вопрос филосовский. Ибо одиночная переменная до фонаря сколько занимает, если при любом раскладе компилятор строит код, который читает-пишет только с 80 битами. Реально выдерживать соглашения нужно только в массивах и структурах.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:45
Человек не спрашивал что лучше. Он хочет разобраться с базовыми типами языка
long long - не базовый тип.
int64_t - есть по стандарту C99.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 15:47
Цитата Сообщение от gromo Посмотреть сообщение
То есть всё это, что ты написал, полностью соответствует той таблице?
Не знаю. Хз на кого рассчитана та статья, но без поллитры и валидола я не в состоянии её читать

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

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

Цитата Сообщение от odip Посмотреть сообщение
int64_t - есть по стандарту C99.
На 100% не уверен, но по-моему это typedef
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.11.2009, 15:50
А еще обратите внимание, коллеги, что тип int64_t есть в Стандарте C99, но отсутствует в Стандарте C++03.
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
03.11.2009, 15:52
Цитата Сообщение от Evg Посмотреть сообщение
На 100% не уверен, но по-моему это typedef
Так и есть.
Code
1
2
3
[serg@localhost ~]$ cpp /usr/include/stdint.h | grep int64_t
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
03.11.2009, 15:57  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Не знаю. Хз на кого рассчитана та статья, но без поллитры и валидола я не в состоянии её читать
Я сравнил, все сходится. А то когда я сам начал изучать, то в голове после этих типов образовалась каша. Но теперь, когда мне объяснил знающий человек, что-то прояснилось.
СПАСИБО ОГРОМНОЕ!!! ПОМОГЛИ!!!!!!!
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:59
На 100% не уверен, но по-моему это typedef
А какая разница что там ?
Главное что он точно 64-битный.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 16:03
Цитата Сообщение от Gravity Посмотреть сообщение
Так и есть.
Code
1
2
3
[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 или нет - всё равно над переменными этого типа нельзя будет строить арифметику
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 16:15
Я имел в виду "не уверен, что 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.
...

Теперь уверен ?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 16:29
Если слово "псевдоним" трактуется как "typedef или define", то можно абсолютно точно сказать, что int64_t НЕ является встроенным типом языка (в чём я почти не сомневался, но мало ли чего порешили разработчики стандарта)
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
03.11.2009, 17:54  [ТС]
Извините за тупость, но у меня ещё такой вопрос:
Если где-то говорится, например тип int или short, или long, то если явно не указано, что они "unsigned" подразумевается, что они "signed"?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 18:06
Цитата Сообщение от gromo Посмотреть сообщение
Если где-то говорится, например тип int или short, или long, то если явно не указано, что они "unsigned" подразумевается, что они "signed"?
В стандарте это остаётся на усмотрение разработчику компилятора, но большинство "нормальных" компиляторов по умолчанию рассматривают тип как знаковый. В случаях для сигнальных процессоров и т.п. сие может быть по другому
1
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
03.11.2009, 18:28  [ТС]
Ну, я когда пишу

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

Значит, по умолчанию целые типы рассматриваются как знаковые?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 18:31
А я тебе что писал?
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
03.11.2009, 18:37  [ТС]
Ну я просто подумал, а вдруг мой компилятор исключение из правил? Ну мало ли...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 18:43
да не... не на столько
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
03.11.2009, 18:52  [ТС]
Ну, спасибо за всё!
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.11.2009, 18:54
Цитата Сообщение от 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)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.11.2009, 18:55
Somebody, просто в более поздние стандарты, судя по всему, включают то, что постфактум уже и так делается несколько лет
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 23:23
можно абсолютно точно сказать, что int64_t НЕ является встроенным типом языка (в чём я почти не сомневался, но мало ли чего порешили разработчики стандарта).
Не пойму к чему ты все время клонишь.
Тип есть, пользоваться им можно.

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

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

Добавлено через 58 секунд
Visual Studio 2005 и Visual Studio 2008 НЕ ПОДДЕРЖИВАЮТ C99.
Насчет VS2010 не знаю - релиз еще не вышел, пробовать не хочу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2009, 23:23

Биты в типах данных
У меня такая проблема: например есть две переменных типа short (16 bit) x1 и x2, и пусть x1 = 55, x2 = 12 их битовое представление 00000000...

Ошибка в типах данных
Здравствуйте. Помогите пожалуйста исправить ошибки в коде var p,it,a,m,b:integer; Procedure TForm1.Button1Click(Sender:...

видимо путаюсь в типах данных
Здравствуйте. Для понимая о чем говорим: #include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;clocale&gt; using namespace std; ...

Макрос. Ошибка в типах данных
Помогите исправить ошибку. В Макросе ошибка на выделенной строке и пишет несоответвие типов. Sub...

Ошибка в типах данных extended и string
Делаю программку на подобии теста, необходимо считывать тексты из нескольких Edit'ов и если они будет верными то используя счетчик...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru