Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

02.11.2009, 20:16. Просмотров 7539. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос о типах данных С++ (C++):

Распаковка parameter pack в наследуемых типах - C++
Есть класс наследуемый от переменного количества типов. Я не могу понять как можно сделать распаковку списка параметров с доступом к...

Вопрос по вводу данных - C++
Вот имеется простой ввод данных: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { int n,i,j; float a, b; ...

Вопрос про тип данных BYTE - C++ Builder
Всем привет! Возможно тупой вопрос, но впервый раз сталкиваюсь с этим. BYTE *bf; bf = 78*10/56; Как такое вообще возможно?

Тупой вопрос какой самый большой целочисленный тип данных?? - Visual C++
В чистом С по ходу unsigned long, а в Visual?? Надо засунуть в переменную 2 в 62 степени((( это - 4611686018427387904 В...

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

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

42
Evg
Эксперт CАвтор FAQ
18677 / 6640 / 468
Регистрация: 30.03.2009
Сообщений: 18,590
Записей в блоге: 29
03.11.2009, 15:37 #16
Что именно прогнал?
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:38 #17
GCC 4.3.4, sizeof(long double) == 12
Сейчас соберу gcc посвежее, проверю
0
Evg
Эксперт CАвтор FAQ
18677 / 6640 / 468
Регистрация: 30.03.2009
Сообщений: 18,590
Записей в блоге: 29
03.11.2009, 15:38 #18
Цитата Сообщение от odip Посмотреть сообщение
Сейчас соберу gcc посвежее, проверю
Программные соглашения написаны много лет назад и от свежести компилятора не зависят
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:40 #19
Хочешь 64-битный тип - лучше используй int64_t, чем некий long long.

Добавлено через 1 минуту
2Evg: Меня не интересует упаковка long double в структуры, которую ты пытаешься проверить.
Меня интересует сколько реально занимает тип long double.
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 15:42  [ТС] #20
Evg

То есть всё это, что ты написал, полностью соответствует той таблице?
==============================================================================
P.s
Типы "long long" и им подобные у меня не работают. Проверял. Создать переменную такого типа
не получается; пишет, что некорректно. (illegal).
0
Evg
Эксперт CАвтор FAQ
18677 / 6640 / 468
Регистрация: 30.03.2009
Сообщений: 18,590
Записей в блоге: 29
03.11.2009, 15:43 #21
Цитата Сообщение от odip Посмотреть сообщение
Хочешь 64-битный тип - лучше используй int64_t, чем некий long long.
Человек не спрашивал что лучше. Он хочет разобраться с базовыми типами языка

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

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

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

Цитата Сообщение от odip Посмотреть сообщение
int64_t - есть по стандарту C99.
На 100% не уверен, но по-моему это typedef
0
CheshireCat
Эксперт С++
2899 / 1248 / 78
Регистрация: 27.05.2008
Сообщений: 3,414
03.11.2009, 15:50 #24
А еще обратите внимание, коллеги, что тип int64_t есть в Стандарте C99, но отсутствует в Стандарте C++03.
0
Gravity
566 / 560 / 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;
0
gromo
372 / 271 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
03.11.2009, 15:57  [ТС] #26
Цитата Сообщение от Evg Посмотреть сообщение
Не знаю. Хз на кого рассчитана та статья, но без поллитры и валидола я не в состоянии её читать
Я сравнил, все сходится. А то когда я сам начал изучать, то в голове после этих типов образовалась каша. Но теперь, когда мне объяснил знающий человек, что-то прояснилось.
СПАСИБО ОГРОМНОЕ!!! ПОМОГЛИ!!!!!!!
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 17.06.2009
Сообщений: 14,164
03.11.2009, 15:59 #27
На 100% не уверен, но по-моему это typedef
А какая разница что там ?
Главное что он точно 64-битный.
0
Evg
Эксперт CАвтор FAQ
18677 / 6640 / 468
Регистрация: 30.03.2009
Сообщений: 18,590
Записей в блоге: 29
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 или нет - всё равно над переменными этого типа нельзя будет строить арифметику
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 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.
...

Теперь уверен ?
0
Evg
Эксперт CАвтор FAQ
18677 / 6640 / 468
Регистрация: 30.03.2009
Сообщений: 18,590
Записей в блоге: 29
03.11.2009, 16:29 #30
Если слово "псевдоним" трактуется как "typedef или define", то можно абсолютно точно сказать, что int64_t НЕ является встроенным типом языка (в чём я почти не сомневался, но мало ли чего порешили разработчики стандарта)
0
03.11.2009, 16:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2009, 16:29
Привет! Вот еще темы с ответами:

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

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

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

Макрос. Ошибка в типах данных - VBA
Помогите исправить ошибку. В Макросе ошибка на выделенной строке и пишет несоответвие типов. Sub Êíîïêà1_Ùåë÷îê() Dim i As Byte...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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