Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2024, 15:58   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 653
По умолчанию Двойной сдвиг - будет ли?

Есть у меня массив
Код:
a: array [1..100]
Но на сколько я знаю, в машинных кодах нумерация всегда идёт с 0

Вопрос: При таком вот обращении к элементу массива будет ли двойной сдвиг?
Код:
a[i-1]
Имеется в виду сначала -1 а потом +1?
Или в машинных кодах будет сразу обращение к элементу i без сдвигов?
Kronos913 вне форума Ответить с цитированием
Старый 30.05.2024, 21:22   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Есть у меня массив
Код:
a: array [1..100]
Но на сколько я знаю, в машинных кодах нумерация всегда идёт с 0
Да ну?
В машинных кодах нумерация (и всё остальное) идёт так, как написал программист. И не важно, написл он это на ЯВУ и доверил генерацию кода компилятору, или же сам на асме, или прямо в машинных кодах (это если уж совсем паранойя). Что закинешь в индексный регистр SI,DI - то там и будет.
И при чём тут "двойной сдвиг" - это совсем из другой оперы.
Чего проще: написать фрагмент и посмотреть сгенерированный компилятором код.
Ну и беспокойный персонаж же из киножурнала "Хочу всё знать!" ! Это я о ТС

Последний раз редактировалось digitalis; 30.05.2024 в 21:33.
digitalis вне форума Ответить с цитированием
Старый 31.05.2024, 18:09   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,834
По умолчанию

ну, в тех массивах, которые я создаю - там мне удобней с 1 до N.
а вот тот же Items.Strings у объекта ListBox - там с нуля заполняется список. вот и приходится переходить на нумерацию с нуля...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 31.05.2024, 21:56   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Речь не идёт о языках - ТС уверен, что уже прямо в железе, на уровне машинных команд массив привязан к нулевому значению индексау. Хотя, насколько помнит мой склероз - в наборе машинных команд "массив" как понятие не присутствует вообще.
Хотя могу и ошибаться - на РС-шном асме писа'л лет полста тому назад.

Последний раз редактировалось digitalis; 01.06.2024 в 12:09.
digitalis вне форума Ответить с цитированием
Старый 01.06.2024, 01:22   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,894
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Хотя, насколько помнит мой склероз - в наборе машинных команд "массив" как понятие не присутствует вообще.
И это естественно. Процессор работает только с регистрами или с конкретными ячейками памяти.
Но вопрос ТС это какой-то бред.
northener вне форума Ответить с цитированием
Старый 01.06.2024, 10:11   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,651
По умолчанию

На уровне машинных команд используется адресация со смещением либо на константу, либо на значение индексного регистра. И здесь вполне логично выглядит ситуация, что первый по списку элемент массива имеет индекс 0, а не 1, так как смещение относительно начала массива нулевое.

Но в некоторых ЯП приняли считать первым элементом массива элемент с индексом 1, а не 0. Это нелогично с точки зрения внутренней организации памяти, но более логично с точки зрения человека. Ну то есть первый имеет индекс 1, второй - 2 и т.д.
Arigato вне форума Ответить с цитированием
Старый 01.06.2024, 12:13   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Но в некоторых ЯП приняли...
Цитата:
Вот иманно! © Хрюн М.
Исходник на ЯП -> компилятор -> последовательность машинных команд. В асме же - как захотим, так и будет.
digitalis вне форума Ответить с цитированием
Старый 01.06.2024, 12:36   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,651
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Исходник на ЯП -> компилятор -> последовательность машинных команд.
Это понятно, но если у нас индексация идет с 1, то для обращения к любому элементу нам надо уменьшить индекс на 1. Если же индексация с нуля, то обращаемся по прямому индексу без дополнительной операции. Но а как это реализовано, зависит уже от компилятора.
Arigato вне форума Ответить с цитированием
Старый 01.06.2024, 16:06   #9
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 653
По умолчанию

Если есть массив
Код:
a:array of byte [1..10]
То какой из вариантов лучше?
Код:
while i<10 do begin
  {другие действия}
  a[i+1]:={что-то там}
  inc(i);
end;
Код:
while i<10 do begin
  {другие действия}
  inc(i);
  a[i]:={что-то там}
end;
p.s. Есть причина по которым нужно именно while а не for и действия до обращения к массиву нужно делать при том значении i которое в начале цикла
Kronos913 вне форума Ответить с цитированием
Старый 01.06.2024, 18:37   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,651
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Есть причина по которым нужно именно while а не for
Нет таких причин...
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Будет ли работать данный код?Что он будет делать? Виталий2266 Общие вопросы Delphi 8 18.10.2018 17:26
Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица andrey4515 Помощь студентам 2 08.01.2014 18:44
Точка с координатами х, у будет находиться в заштрихованной области, написать выражение которое будет истинным для данного рис. Polina S1 Помощь студентам 1 31.10.2013 16:38