10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
1

Как понять, какого типа константа?

10.08.2016, 11:55. Показов 1244. Ответов 9

константу обычно обо значают типа
Delphi
1
2
s = 'stroka';
n = 1344;
Как понять какого типа константа n? Это integer, cardinal, или что?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2016, 11:55
Ответы с готовыми решениями:

123 - какого типа эта константа???
Здравствуйте! Если писать .Bookmarks.Item(s).Range.Text =SummaPropis(123) результат 'Сто...

Даны функциональная константа, предикатная константа и определённое количество аксиом. Как построить модель
Даны функциональная константа, предикатная константа и определённое количество аксиом. Как построит...

Какого типа это ДУ и как его решать
Подскажите пож-та какого типа это ДУ и как его решать: y'=x+x^2+y^2 Похоже на ур-е Бернулли y'...

Можно ли как-то понять, что форма была скопирована и перенесена из какого-либо другого файла Access?
добрый день! подскажите, пжл, можно ли как-то понять, что , например, форма была скопирована и...

9
пофигист широкого профиля
4633 / 3078 / 852
Регистрация: 15.07.2013
Сообщений: 17,743
10.08.2016, 12:05 2
Никакого конкретного типа у этой константы нет.
1
129 / 17 / 7
Регистрация: 02.11.2015
Сообщений: 52
10.08.2016, 12:11 3
Лучший ответ Сообщение было отмечено ПраПрапорщик как решение

Решение

Pascal преобразовывает константу к типу наименьшего размера, в который влезет константа. В данном случае
Pascal
1
n = 1344;
n будет типа SmallInt (2х байтовый знаковый тип). Можно указать тип явно:
Pascal
1
n: longint = 1344;
Тут n уже будет longint (так как тип явно указан).
1
пофигист широкого профиля
4633 / 3078 / 852
Регистрация: 15.07.2013
Сообщений: 17,743
10.08.2016, 12:34 4
Цитата Сообщение от alex256 Посмотреть сообщение
Pascal преобразовывает константу к типу наименьшего размера
Зачем ему это надо?
0
BOGG ART
10.08.2016, 12:56
  #5

Не по теме:

Оптимизация, чтоб её. Мне множество урезает до минимума, никак не заставлю выравнивать к 4 байтам.

0
10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
10.08.2016, 12:59  [ТС] 6
alex256, а если подходит под джва типа одинаково? Например, integer (в текущей версии fpc) и longint имеют одинаковый диапазон
0
northener
10.08.2016, 13:09
  #7

Не по теме:

Цитата Сообщение от BOGG ART Посмотреть сообщение
Оптимизация, чтоб её.
При чем тут оптимизация? Зачем ее вообще хранить в памяти? Она же просто подставляется в машкод в тех местах кода, где она используется.

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32489 / 20975 / 8115
Регистрация: 22.10.2011
Сообщений: 36,249
Записей в блоге: 7
10.08.2016, 13:09 8
Цитата Сообщение от alex256 Посмотреть сообщение
Pascal преобразовывает константу к типу наименьшего размера, в который влезет константа
Паскаль подставляет значение, записанное в константе, туда, где используется ее имя, а не приводит ничего ни к каким типам. А вот потом уже начинаются всяческие проверки, нет ли каких-либо несоответствий или выходов за границы типов РЕЗУЛЬТАТА выражения (или параметров подпрограмм), что не имеет ничего общего с "типом" константы.
2
10 / 7 / 3
Регистрация: 14.07.2015
Сообщений: 284
10.08.2016, 13:32  [ТС] 9
volvo, надо было мне изначально объяснить зачем мне это понадобилось.
допустим объявил консту:
Delphi
1
const DEF_ID = 87311;
И хочу объявить массив из чисел, заполнять которые будут этой константой:
Delphi
1
2
for i := 0 to High(Massiv) do
Massiv[i] := DEF_ID;
вот каким надо объявлять массив? array of LongInt или как?
Я понимаю что можно забить на эти тонкости и обычно компилятор сам приводит типы (если нету перехода за границы диапазона). Но вдруг я объявлю массив как массив cardinal, а затем мне вздумается и я изменю DEF_ID на -15, или наоборот 4 294 967 297 (превышение диапазона cardinal), и буду потом исать ошибку по коду.

Даже если это все надуманные проблемы, всеравно знать не помешает такие тонкости языка и компилятора
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32489 / 20975 / 8115
Регистрация: 22.10.2011
Сообщений: 36,249
Записей в блоге: 7
10.08.2016, 14:13 10
Лучший ответ Сообщение было отмечено ПраПрапорщик как решение

Решение

Цитата Сообщение от ПраПрапорщик Посмотреть сообщение
и буду потом исать ошибку по коду
А на предупреждения компилятора тебя не учили обращать внимание? Он тебе сам покажет все места, где есть несоответствия:

Pascal
1
2
3
4
5
6
7
8
const
  DEF_ID = 4294967297;
var
  Massiv : array of Cardinal;
 
// ...
  for i := 0 to High(Massiv) do
  Massiv[i] := DEF_ID; // Warning: range check error while evaluating constants (4294967297 must be between 0 and 4294967295)
Pascal
1
2
3
4
5
6
7
8
const
  DEF_ID = -15;
var
  Massiv : array of Cardinal;
 
// ...
  for i := 0 to High(Massiv) do
  Massiv[i] := DEF_ID; // Warning: range check error while evaluating constants (-15 must be between 0 and 4294967295)
Pascal
1
2
3
4
5
6
7
8
const
  DEF_ID = 150000;
var
  Massiv : array of SmallInt;
 
// ...
  for i := 0 to High(Massiv) do
  Massiv[i] := DEF_ID; // Warning: range check error while evaluating constants (150000 must be between -32768 and 32767)
, а если добавить -Sew в Параметры проекта -> Компилятор -> Параметры пользователя, то код вообще не будет компилироваться, пока все подобные предупреждения не будут исправлены.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2016, 14:13
Помогаю со студенческими работами здесь

Константа типа short
Как в программе задать константу типа short? Чтобы понятнее было приведу индефикаторы, которые в...

Как определиться объект какого типа мы перетаскивали мышью?
Всем здравствуйте. На форме label1 и button1. Оба объекта могут инициировать перетаскивание по...

Какого типа это уравнение и как его решить - 2
Какого типа это ур-ние и как его решить (дайте, пожалуйста, хотя бы подсказку): x^2*dy/dx+y^2-2xy=0

Какого типа это уравнение и как его решить?
Какого типа это диффур. и как его решить (дайте, пожалуйста, хотя бы подсказку): dy/dx-y/x-8/x^2 ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru