powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ручное назначение номеров индексов массива
18 сообщений из 93, страница 4 из 4
Ручное назначение номеров индексов массива
    #39281535
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как выше написал, я электронщик, а в электронике сдвиг это просто провода по диагонали, добавить нолики в младшие разряды результата и сделать ИЛИ тому что ушло за разрядность для контроля переполнения. Т.е. максимум один такт вычисления.
И возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39281544
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИ возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь.
это забота компилятора.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39281910
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр СедовBagaBagaв С (и С++) есть прекрасная идиома (!с) вместо (с == 0).Я пишу так:
!x -- для bool
x == 0 -- для чисел

В С/С++ нет разницы между целым и булевым. Ноль - ложь, всё иное - истина :). И будет любопытно, как вы начнёте рефаторить код, кода вдруг bool заменят на int или наоборот... В любом случае !x - широко распространённая практики именно в С/С++...

Пётр СедовBagaBagaИначе вы не сможете прочесть половину кода открытых моделей NASA...Надеюсь, никогда в жизни не придётся разбираться в коде, который написали учёные. Куча переменных с именами из одной буквы -- это нечто.

Могу предложить почитать код на COBOL... на нём точно писали не ученые, но multiplied by вместо знака умножения это ... сильно. И не волнуйтесь, имена из одной буквы вы можете встретьить не только у ученых :).

PS
Надеюсь, все помнять, что переменные, чьb имена начинаются с i,j,k,l,m,n - целоцисленные по умолчанию? :)
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39281938
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКак выше написал, я электронщик, а в электронике сдвиг это просто провода по диагонали, добавить нолики в младшие разряды результата и сделать ИЛИ тому что ушло за разрядность для контроля переполнения. Т.е. максимум один такт вычисления.
И возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь.
Дим. Мне кажется это сильно упрощение. Мне кажется здесь ключевое слово не электроника
а набор инструкций. Например 1 раунд шифрования за 1 инструкцию. А сдвиг это уже мелочи.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282005
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДим. Мне кажется это сильно упрощение. Мне кажется здесь ключевое слово не электроника
а набор инструкций. Например 1 раунд шифрования за 1 инструкцию. А сдвиг это уже мелочи.
Реализация в электронике определяет время выполнения инструкций. Вот я к чему.
По сути любая электроника это тоже набор инструкций. Только в железе. Базовые блоки всей цифровой электроники - элементы И, И-НЕ, ИЛИ, ИЛИ-НЕ, НЕ и ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR). Каждый это несколько транзисторов/диодов/резисторов . Вот время прохождения транзистора это и есть константа, а сколько транзисторов надо пройти для выполнения каждой инструкции асма зависит от инструкции.
Например при выполнении A<<1 все разряды обрабатываются параллельно, тут просто надо скоммутировать 0й разряд входа с 1м выхода и т.д. (готовой схемы не нашел, рисовать лень), а если сделать A+A то уже каскад из одноразрядных сумматоров (рис.10) , т.е. последовательно складываем 0-е разряды, получаем 0-й разряд результата и бит переполнения, передаем его следующему блоку который берет его и 1е разряды и т.д. последовательно каждый разряд. В итоге получили что для 32бит A<<1 в 32 раза быстрее A+A. Это упрощенно, в реале за счет большого количества транзисторов (базовых блоков) можно ускорить например сделав 8-битный сумматор, где 8 разрядов будут параллельно обрабатываться, тогда каскад будет из 4х сумматоров.

Вобщем я к тому что измерение скорости в количестве инструкций процессора это очень грубое измерение.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282040
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, непонятно зачем ты сделал такой глубокий экскурс в fundamentals для меня.

Ну да ладно. Я думаю что общая (средняя) производительность бинарного кода
зависит конечно-же от алгоритма который ты выбрал. Но мы это просто здесь
пропускаем. Считаем что к алгоритму нет замечаений. И второе - это от
оптимизатора и от возможностей архитектуры под которую ты собираешь.
И не забывать про side-effects. Сдвиги сдвигами но умножение на степень
двойки для отрицательных чисел надо реализовать особо или-же в случае
сомнений может быть имеет смысл вообще отказаться от сдвигов а
просто умножить на 2^N и довериться компиллятору.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282044
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСдвиги сдвигами но умножение на степень
двойки для отрицательных чисел надо реализовать особо
двоичное представление отрицательных таково что знак не мешает
Значение двоичное представление-11111b-21110b-41100b
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282052
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну правильно. Ты должен гарантировать что будут сгенерированы инструкции SAL/SAR
для знакового типа. Только где в части стандарта С++ описано поведение знаковых
сдвигов?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282726
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу правильно. Ты должен гарантировать что будут сгенерированы инструкции SAL/SAR
для знакового типа. Только где в части стандарта С++ описано поведение знаковых
сдвигов?
Зависит от того каком представлении хранятся отрицательные числа. Если это дополнительное представление (т.е. отрицательное это 2^R - |X|, где R разрядность) то <<1 равносильно умножению на 2. Насколько я знаю везде используют дополнительное представление, т.к. оно намного удобнее для воплощения мат.операций в железе. Т.к. многие операции делаются одинаково независимо от вида операндов (со знаком и без) Например сложение, потом SHR и SAR это вообще синонимы одной и той же команды. ЕМНИП вычитания как такового вообще нет в железе, второй операнд переводится в дополнительную форму и дальше сложение.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, а много ты из практики видел альтернативных способов представления знакового целого?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39282788
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, а много ты из практики видел альтернативных способов представления знакового целого?
Практики у меня немного, кроме x86 можно сказать ничего не видел, но когда мы изучали двоичную математику (шла в курсе схемотехники год-полтора по 5-6 пар в неделю) про альтернативные варианты нам не рассказывали.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283047
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonDima T, а много ты из практики видел альтернативных способов представления знакового целого?
Практики у меня немного, кроме x86 можно сказать ничего не видел, но когда мы изучали двоичную математику (шла в курсе схемотехники год-полтора по 5-6 пар в неделю) про альтернативные варианты нам не рассказывали.
Аналогично. Из курса системотехники нам рассказали о прямом коде, обратном, и модифицированом обратном коде.

Но в своей практике я встречал формат классического 32х битного целого для last-endian (x86)
и big-endian (x86_64,spark,Java). Попадают бит-в-бит. Можно сериализовать между С++ и Java
целые числа.

Другие формы - не встречал.

Кстати Java определяет две операции правого сдвига ">>" и ">>>".
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283072
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо в своей практике я встречал формат классического 32х битного целого для last-endian (x86)
и big-endian (x86_64,spark,Java).
endian тут вообще ни при чем, это просто порядок читать биты справа-налево или слева-направо, битовый сдвиг ведь сдвиг в сторону старших/младших, а где они (справа или слева) вообще пофиг.

maytonКстати Java определяет две операции правого сдвига ">>" и ">>>".
Ну так есть два вида сдвига: обычный и циклический. Второй по кругу, то что выпало вставляется с другой стороны. Почитай хэлп почти уверен что >>> циклический.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283076
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tendian тут вообще ни при чем, это просто порядок читать биты справа-налево или слева-направо, битовый сдвиг ведь сдвиг в сторону старших/младших, а где они (справа или слева) вообще пофиг.

Я делаю акцент на сериализации.

maytonПочитай хэлп почти уверен что >>> циклический.
Неа
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283077
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПочитай хэлп почти уверен что >>> циклический.
не угадал - просто беззнаковый сдвиг
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283134
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima TПочитай хэлп почти уверен что >>> циклический.
не угадал - просто беззнаковый сдвиг
а в жаве типов чтоли нет?
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзопропилпропущено...

не угадал - просто беззнаковый сдвиг
а в жаве типов чтоли нет?
Все типы - знаковые с точки зрения арифметики целых чисел.
Но в момент битовых операций 'and','or','xor' обладают семантикой unsidned.
...
Рейтинг: 0 / 0
Ручное назначение номеров индексов массива
    #39283136
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

а в жаве типов чтоли нет?
Все типы - знаковые с точки зрения арифметики целых чисел.
Но в момент битовых операций 'and','or','xor' обладают семантикой unsidned.
Тогда понятно, нет беззнаковых для того и костыль >>>
...
Рейтинг: 0 / 0
18 сообщений из 93, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ручное назначение номеров индексов массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]