6 / 3 / 3
Регистрация: 25.06.2018
Сообщений: 24
|
||||||
1 | ||||||
Задать тип массива через переменную30.10.2019, 00:08. Показов 431. Ответов 5
Метки нет (Все метки)
Народ, нужна ваша помощь. В общем, ситуация такая: В зависимости от условий, необходимо проинициализировать массив как byte, word, longword или как uint64. Создать 4 разных массива не катит. Нужно, чтобы получилось что-то на подобии:
0
|
30.10.2019, 00:08 | |
Ответы с готовыми решениями:
5
Как задать размер массива через переменную? Задать размер динамического массива через переменную, обявленную как extern Как задать style через переменную? Задать свойство объекта через переменную |
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
|
|
30.10.2019, 00:53 | 2 |
Назовите изначальную задачу. Записать разные типы массивов в 1 переменную можно, но точно не так как вы показали в том псевдокоде.
0
|
6 / 3 / 3
Регистрация: 25.06.2018
Сообщений: 24
|
|
30.10.2019, 01:08 [ТС] | 3 |
Задача не в том, чтобы записать разные типы массивов в какую-либо переменную, а в том, чтобы 1 единственный одномерный массив, в зависимости от условий, имел тип данных либо byte, либо word, либо longword, либо uint64. То есть этот массив должен 1 раз проинициализироваться, став массивом того типа данных, который мне нужен.
0
|
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
|
||||||
30.10.2019, 01:39 | 4 | |||||
Нет, я спрашивал не это. Вы говорите о решении (использовании переменной в которую можно записать разные типы массивов) которое вы додумали сами. А в чём состоит задача для которой вы решили что такое необходимо?
"Не масло а масляное". В данном языке строгая типизация, то есть если вы объявили переменную как byte - в неё не записать значение типа string. А array of byte и array of word - это совершенно разные типы. Поэтому вопрос сводиться к тому как создать переменную, в которую всё же можно будет записать 2 и более разных типов массивов.А возможно это только через наследование. У всех типов есть базовый класс object. Однако если присвоить переменной типа object массив - работать с ним можно будет только при каждом действии проверяя, каким типом массива он является. Это довольно много кода и чуток медленно. Так же все массивы наследуют от типа System.Array. И у него уже есть абстрактные методы для чтения и записи элементов. Но чтоб у него получить/записать элемент через System.Array - его надо сначала запаковать в object, а потом распаковать. А так как у вас все типы элементов - записи (а точнее числа на 8 16 32 и 64 бит) - это будет чрезвычайно затратная операция. Лучше сделать свою обёртку для массивов, как то так:
1
|
6 / 3 / 3
Регистрация: 25.06.2018
Сообщений: 24
|
|
30.10.2019, 02:16 [ТС] | 5 |
Изначальная задача такая: пишу интерпретатор языка brainf*ck, в котором можно выбрать битность ячейки. 8, 16, 32 и 64 бит соответственно. И я бы особо и не парился, создал бы массив uint64 и в зависимости от выбранной битности просто бы обнулял значение ячейки при достижении максимального значения + 1 для выбранной битности, но я подумал, что можно все решить по красоте и просто проинициализировать массив, чтобы его ячейки были такой битности, которой мне нужны. Ну раз в pascal abc net нет тривиального способа это сделать, то просто сделаю так, как описал выше. Но тем не менее, спасибо за помощь.
0
|
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
|
||||||
30.10.2019, 11:48 | 6 | |||||
В таком случае имеет смысл делать неуправляемой памятью. Ей вообще без разницы каким типом данных считать её байты. И скорость доступа довольно большая.
Так же, в брейнфаке типа как бесконечный объём памяти, но в реальности так не работает. Поэтому выделять память надо по мере надобности. В примере ниже я поставил 4 килобайта. Но вообще это рандомно взятое с головы значение. Точнее это объём ячейки памяти на большинстве SSD дисков. То есть если вы будете сбрасывать память на диск - будет очень быстро и удобно, правда я вообще хз зачем)). Но, главное чтоб это число делилось на 8 (потому что размер uint64) и было не меньше 8 (опять же, чтоб uint64 помещалось). А так - можете ставить там какое то своё число. А вот и сам пример. Реализовал я не всё, движение вправо и чтение делается по аналогии с тем что уже есть. Ну а увеличение значения ячейки - это по сути Write(Read+1) .И если что - то что при чтении/записи данные передаются как 64-битное число, это вообще не проблема, ни скорости не памяти. Память на стеке по сути бесконечная (если не насиловать его рекурсией). А скорость, если у вас конечно не 32-битный процессор - 64-битные числа будут обрабатываться не медленнее 32-битных. И точно быстрее 8 битных, потому что для сложения 2 значений типа byte - процессор всё равно преобразовывает их в integer.
1
|
30.10.2019, 11:48 | |
30.10.2019, 11:48 | |
Помогаю со студенческими работами здесь
6
Задать цвет Label через переменную Задать сетевой путь через переменную Задать ширину блока через переменную Как задать размеры агрегируемого через переменную? Задать цвет заливки при действии через переменную Задать имя поля в таблице через переменную в процедуре Акцесс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|