|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.05.2024, 15:58 | #1 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 653
|
Двойной сдвиг - будет ли?
Есть у меня массив
Код:
Вопрос: При таком вот обращении к элементу массива будет ли двойной сдвиг? Код:
Или в машинных кодах будет сразу обращение к элементу i без сдвигов? |
30.05.2024, 21:22 | #2 | |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Цитата:
В машинных кодах нумерация (и всё остальное) идёт так, как написал программист. И не важно, написл он это на ЯВУ и доверил генерацию кода компилятору, или же сам на асме, или прямо в машинных кодах (это если уж совсем паранойя). Что закинешь в индексный регистр SI,DI - то там и будет. И при чём тут "двойной сдвиг" - это совсем из другой оперы. Чего проще: написать фрагмент и посмотреть сгенерированный компилятором код. Ну и беспокойный персонаж же из киножурнала "Хочу всё знать!" ! Это я о ТС Последний раз редактировалось digitalis; 30.05.2024 в 21:33. |
|
31.05.2024, 18:09 | #3 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,834
|
ну, в тех массивах, которые я создаю - там мне удобней с 1 до N.
а вот тот же Items.Strings у объекта ListBox - там с нуля заполняется список. вот и приходится переходить на нумерацию с нуля...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
|
31.05.2024, 21:56 | #4 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
Речь не идёт о языках - ТС уверен, что уже прямо в железе, на уровне машинных команд массив привязан к нулевому значению индексау. Хотя, насколько помнит мой склероз - в наборе машинных команд "массив" как понятие не присутствует вообще.
Хотя могу и ошибаться - на РС-шном асме писа'л лет полста тому назад. Последний раз редактировалось digitalis; 01.06.2024 в 12:09. |
01.06.2024, 01:22 | #5 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,894
|
|
01.06.2024, 10:11 | #6 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,651
|
На уровне машинных команд используется адресация со смещением либо на константу, либо на значение индексного регистра. И здесь вполне логично выглядит ситуация, что первый по списку элемент массива имеет индекс 0, а не 1, так как смещение относительно начала массива нулевое.
Но в некоторых ЯП приняли считать первым элементом массива элемент с индексом 1, а не 0. Это нелогично с точки зрения внутренней организации памяти, но более логично с точки зрения человека. Ну то есть первый имеет индекс 1, второй - 2 и т.д. E-Mail: arigato.freelance@gmail.com
|
01.06.2024, 12:13 | #7 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,620
|
|
01.06.2024, 12:36 | #8 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,651
|
Это понятно, но если у нас индексация идет с 1, то для обращения к любому элементу нам надо уменьшить индекс на 1. Если же индексация с нуля, то обращаемся по прямому индексу без дополнительной операции. Но а как это реализовано, зависит уже от компилятора.
E-Mail: arigato.freelance@gmail.com
|
01.06.2024, 16:06 | #9 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 653
|
Если есть массив
Код:
Код:
Код:
|
01.06.2024, 18:37 | #10 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,651
|
Нет таких причин...
E-Mail: arigato.freelance@gmail.com
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Будет ли работать данный код?Что он будет делать? | Виталий2266 | Общие вопросы Delphi | 8 | 18.10.2018 17:26 |
Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица | andrey4515 | Помощь студентам | 2 | 08.01.2014 18:44 |
Точка с координатами х, у будет находиться в заштрихованной области, написать выражение которое будет истинным для данного рис. | Polina S1 | Помощь студентам | 1 | 31.10.2013 16:38 |