Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Как выше написал, я электронщик, а в электронике сдвиг это просто провода по диагонали, добавить нолики в младшие разряды результата и сделать ИЛИ тому что ушло за разрядность для контроля переполнения. Т.е. максимум один такт вычисления. И возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 20:52 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima TИ возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь. это забота компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 21:07 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Пётр СедовBagaBagaв С (и С++) есть прекрасная идиома (!с) вместо (с == 0).Я пишу так: !x -- для bool x == 0 -- для чисел В С/С++ нет разницы между целым и булевым. Ноль - ложь, всё иное - истина :). И будет любопытно, как вы начнёте рефаторить код, кода вдруг bool заменят на int или наоборот... В любом случае !x - широко распространённая практики именно в С/С++... Пётр СедовBagaBagaИначе вы не сможете прочесть половину кода открытых моделей NASA...Надеюсь, никогда в жизни не придётся разбираться в коде, который написали учёные. Куча переменных с именами из одной буквы -- это нечто. Могу предложить почитать код на COBOL... на нём точно писали не ученые, но multiplied by вместо знака умножения это ... сильно. И не волнуйтесь, имена из одной буквы вы можете встретьить не только у ученых :). PS Надеюсь, все помнять, что переменные, чьb имена начинаются с i,j,k,l,m,n - целоцисленные по умолчанию? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 14:10 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima TКак выше написал, я электронщик, а в электронике сдвиг это просто провода по диагонали, добавить нолики в младшие разряды результата и сделать ИЛИ тому что ушло за разрядность для контроля переполнения. Т.е. максимум один такт вычисления. И возведение в степень: это во первых очень сложная операция умножения, которая основана на сложении и еще надо в цикле все выполнять. Тут такты считать устанешь. Дим. Мне кажется это сильно упрощение. Мне кажется здесь ключевое слово не электроника а набор инструкций. Например 1 раунд шифрования за 1 инструкцию. А сдвиг это уже мелочи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 14:31 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonДим. Мне кажется это сильно упрощение. Мне кажется здесь ключевое слово не электроника а набор инструкций. Например 1 раунд шифрования за 1 инструкцию. А сдвиг это уже мелочи. Реализация в электронике определяет время выполнения инструкций. Вот я к чему. По сути любая электроника это тоже набор инструкций. Только в железе. Базовые блоки всей цифровой электроники - элементы И, И-НЕ, ИЛИ, ИЛИ-НЕ, НЕ и ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR). Каждый это несколько транзисторов/диодов/резисторов . Вот время прохождения транзистора это и есть константа, а сколько транзисторов надо пройти для выполнения каждой инструкции асма зависит от инструкции. Например при выполнении A<<1 все разряды обрабатываются параллельно, тут просто надо скоммутировать 0й разряд входа с 1м выхода и т.д. (готовой схемы не нашел, рисовать лень), а если сделать A+A то уже каскад из одноразрядных сумматоров (рис.10) , т.е. последовательно складываем 0-е разряды, получаем 0-й разряд результата и бит переполнения, передаем его следующему блоку который берет его и 1е разряды и т.д. последовательно каждый разряд. В итоге получили что для 32бит A<<1 в 32 раза быстрее A+A. Это упрощенно, в реале за счет большого количества транзисторов (базовых блоков) можно ускорить например сделав 8-битный сумматор, где 8 разрядов будут параллельно обрабатываться, тогда каскад будет из 4х сумматоров. Вобщем я к тому что измерение скорости в количестве инструкций процессора это очень грубое измерение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 15:51 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima T, непонятно зачем ты сделал такой глубокий экскурс в fundamentals для меня. Ну да ладно. Я думаю что общая (средняя) производительность бинарного кода зависит конечно-же от алгоритма который ты выбрал. Но мы это просто здесь пропускаем. Считаем что к алгоритму нет замечаений. И второе - это от оптимизатора и от возможностей архитектуры под которую ты собираешь. И не забывать про side-effects. Сдвиги сдвигами но умножение на степень двойки для отрицательных чисел надо реализовать особо или-же в случае сомнений может быть имеет смысл вообще отказаться от сдвигов а просто умножить на 2^N и довериться компиллятору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 16:16 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonСдвиги сдвигами но умножение на степень двойки для отрицательных чисел надо реализовать особо двоичное представление отрицательных таково что знак не мешает Значение двоичное представление-11111b-21110b-41100b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 16:22 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Ну правильно. Ты должен гарантировать что будут сгенерированы инструкции SAL/SAR для знакового типа. Только где в части стандарта С++ описано поведение знаковых сдвигов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 16:34 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonНу правильно. Ты должен гарантировать что будут сгенерированы инструкции SAL/SAR для знакового типа. Только где в части стандарта С++ описано поведение знаковых сдвигов? Зависит от того каком представлении хранятся отрицательные числа. Если это дополнительное представление (т.е. отрицательное это 2^R - |X|, где R разрядность) то <<1 равносильно умножению на 2. Насколько я знаю везде используют дополнительное представление, т.к. оно намного удобнее для воплощения мат.операций в железе. Т.к. многие операции делаются одинаково независимо от вида операндов (со знаком и без) Например сложение, потом SHR и SAR это вообще синонимы одной и той же команды. ЕМНИП вычитания как такового вообще нет в железе, второй операнд переводится в дополнительную форму и дальше сложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:38 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima T, а много ты из практики видел альтернативных способов представления знакового целого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 13:57 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonDima T, а много ты из практики видел альтернативных способов представления знакового целого? Практики у меня немного, кроме x86 можно сказать ничего не видел, но когда мы изучали двоичную математику (шла в курсе схемотехники год-полтора по 5-6 пар в неделю) про альтернативные варианты нам не рассказывали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 14:23 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonDima T, а много ты из практики видел альтернативных способов представления знакового целого? Практики у меня немного, кроме x86 можно сказать ничего не видел, но когда мы изучали двоичную математику (шла в курсе схемотехники год-полтора по 5-6 пар в неделю) про альтернативные варианты нам не рассказывали. Аналогично. Из курса системотехники нам рассказали о прямом коде, обратном, и модифицированом обратном коде. Но в своей практике я встречал формат классического 32х битного целого для last-endian (x86) и big-endian (x86_64,spark,Java). Попадают бит-в-бит. Можно сериализовать между С++ и Java целые числа. Другие формы - не встречал. Кстати Java определяет две операции правого сдвига ">>" и ">>>". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 17:36 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonНо в своей практике я встречал формат классического 32х битного целого для last-endian (x86) и big-endian (x86_64,spark,Java). endian тут вообще ни при чем, это просто порядок читать биты справа-налево или слева-направо, битовый сдвиг ведь сдвиг в сторону старших/младших, а где они (справа или слева) вообще пофиг. maytonКстати Java определяет две операции правого сдвига ">>" и ">>>". Ну так есть два вида сдвига: обычный и циклический. Второй по кругу, то что выпало вставляется с другой стороны. Почитай хэлп почти уверен что >>> циклический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 18:09 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima Tendian тут вообще ни при чем, это просто порядок читать биты справа-налево или слева-направо, битовый сдвиг ведь сдвиг в сторону старших/младших, а где они (справа или слева) вообще пофиг. Я делаю акцент на сериализации. maytonПочитай хэлп почти уверен что >>> циклический. Неа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 18:20 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima TПочитай хэлп почти уверен что >>> циклический. не угадал - просто беззнаковый сдвиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 18:21 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TПочитай хэлп почти уверен что >>> циклический. не угадал - просто беззнаковый сдвиг а в жаве типов чтоли нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:06 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилпропущено... не угадал - просто беззнаковый сдвиг а в жаве типов чтоли нет? Все типы - знаковые с точки зрения арифметики целых чисел. Но в момент битовых операций 'and','or','xor' обладают семантикой unsidned. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:08 |
|
||
|
Ручное назначение номеров индексов массива
|
|||
|---|---|---|---|
|
#18+
maytonDima Tпропущено... а в жаве типов чтоли нет? Все типы - знаковые с точки зрения арифметики целых чисел. Но в момент битовых операций 'and','or','xor' обладают семантикой unsidned. Тогда понятно, нет беззнаковых для того и костыль >>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2016, 20:10 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39282788&tid=2018463]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 139ms |

| 0 / 0 |
