Самый быстрый код для переворота 32-битного целого

Тема в разделе "WASM.A&O", создана пользователем Onix-Studio, 23 окт 2006.

  1. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Оба на, кто нарисовался. Попытаюсь выяснить, что ты за чел. Судя по твоему флуду который ты несешь по всему форуму, чувство юмора у тебя имеется, а энто признак ума.
    Ник в 99% случаях выбирают такой, который полностью характеризует данного человека.
    Посмотрим как он расшифровывается. Слово fluderast в английском языке нет, значит это составное слово. Зато есть слово flu которое переводится как грипп. Осталось derast. Ну теперь всё понятно:

    flu + pederast = fluderast.

    Вывод: ты гриппозный педераст с чувством юмора. Согласись вполне логичный вывод.

    Но дело не в том, что ты из себя представляешь, а в том, что твое чувство юмора вместе с гриппозным заболеванием позволяет утверждать, что ты и есть самый умный и самый скромный в этом форуме. Но больше чем уверен, ответить за слова ты не сможешь.
    Здесь спор типа: 'Я. Нет, Я' не уместен. Предлагаю тебе, выбрать любую тему по нахождению алгоритма в форуме WASM.A&O (не созданную тобой или новичком) где ты думаешь, что хоть немного лучше меня или заткнись на веке. Любой другой ответ покажет всем, что ты просто ноль и за слова отвечать не умеешь. Можешь заплакать и настучать модератору.

    Пока тебя уважают все, и даже я.
     
  2. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Такое ощущение, что по кому-то здесь баня плачет. Раздел 2.2 правил форума.
     
  3. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Ой, ой, ой, великая дуру засмущалась.
    Если недостоин плюнуть в рожу, плюнь хотябы в мои сообщения.
    Чё слабо?
     
  4. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Stiver
    А чё сдесь еще правила есть. Нукась просвети.

    Зачем ты fluderast-у про баню напомнил. Теперь мы его долго не увидим.
    Или может быть, этот гриппозный, так смачно плюнул, что монитор пробил.
     
  5. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    если по размеру то так )))
    Код (Text):
    1.        xor  ebx,ebx
    2.        mov eax,0001010111b       
    3.        inc  ebx
    4. m1:  rcr   eax,1       
    5.        rcl   ebx,1
    6.        jnc  m1
     
  6. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Если по уму - так::: за ошибки не бейте, не спал всю ночь)
    Код (Text):
    1.     mov ebx,0x0F0F0F0F
    2.     mov ecx,0x33333333
    3.     mov edx,0x55555555
    4.     bswap
    5.     and  ebx,eax
    6.     xor   eax,ebx
    7.     rol    ebx,4
    8.     ror    eax,4
    9.     or     eax,ebx
    10.     and  ecx,eax
    11.     xor   eax,ecx
    12.     rol    ecx,2
    13.     ror    eax,2
    14.     or     eax,ecx
    15.     and  edx,eax
    16.     xor   eax,edx
    17.     rol    edx,1
    18.     ror    eax,1
    19.     or     eax,edx
     
  7. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Proteus Ладно уж, так и быть, уговорил, сегодня бить не будем. Действительно первый из твоих приведенных кодов самый маленький, а второй самый быстрый. Только у них есть совсем незначительные недостатки: первый не по теме, а второй не работает. Когда проснешься, напиши, почему такая демагогия.
     
  8. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Ну если я пол года не запускал асм, а потом в пять утра вылез на форум и в спешке что-то ляпнул опухшими мозгами (не проверяя), разумеется мог где-то ошибиться)))

    Идея-то кода вполне ясная, можно и без меня запустить))... Я врочем очепаточку маленькую убрал... надеюсь она там одна была

    Ну может ещё кому не нравится что HEX записан в стиле Си, но это же мелочи )
     
  9. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    А ты Proteus в натуре крут. Мы буквально восхищены твоей сообразительностью. Ты действительно мастер алгоритмов и башка у тебя не только как затычка чтоб кровь из шеи не вытекала, используется. Только вот с оптимизацией у тебя проблемы, поэтому мой код в 1,2 раза быстрее твоего и теперь лидер опять Я.
    Код (Text):
    1. mov eax,0001010111b
    2. mov ebx,0x0F0F0F0F
    3. mov ecx,0x33333333
    4. mov edx,0x55555555
    5. bswap eax
    6. and  ebx,eax
    7. xor   eax,ebx
    8. shl    ebx,4
    9. shr    eax,4
    10. or     eax,ebx
    11. and  ecx,eax
    12. xor   eax,ecx
    13. shl    ecx,2
    14. shr    eax,2
    15. or     eax,ecx
    16. and  edx,eax
    17. xor   eax,edx
    18. shl    edx,1
    19. shr    eax,1
    20. or     eax,edx
    Но это еще далеко не предел.
     
  10. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Я тебе больше скажу, и сам это алгоритм возможно не предел. По крайней мере мне интуиция говорит, что можно подумать.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    fluderast
    izebars
    Вам обоим следует угомониться, в особенности, последнему. Господа, вы нарушаете правила форума. Если вы его так не уважаете, как хотите показать, зачем возвращаетесь сюда?
     
  12. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Кто ты такой чтоб нам указывать что нужно делать. Щас сообщу модератору он быстро тебя удалит.
     
  13. izebars

    izebars Гадя Петрович Хренова

    Публикаций:
    0
    Регистрация:
    30 сен 2006
    Сообщения:
    25
    Адрес:
    На диване
    Ой, я очень извиняюсь, не признал, оказывается вы и есть бог этого форума. Это очень мило с вашей стороны, что вы решили поговорить именно со мной. Пользуясь моментом, с вашего позволения хочу предложить вам несколько маленьких советов. Лучше вам изменить подпись Даос на подпись Бог, тогда все сразу поймут с кем имеют дело. А я то смотрю, что за Даос думаю, чё за фигня. Кстати вот это слово можно ли употреблять в форуме? Если вас не затруднит, приведите пожалуйста список всех слов которые нельзя употреблять в форуме потому что вы удалили мои сообщения clonу хотя там не было по моему мнению ни одного непристойного выражения. Да и если можно список всех ваших заповедей. Кстати хоть вы и Бог у вас есть несолько не простительных ошибок на сайте. Я тоже большой поклонник телесериал "Xena warrior princess" но пора уже запомнить, что он переводится как "Зена - королева войнов" а ни "Дзена - королева войнов". И ваще я к примеру не хочу называться как "воин дзена" так и "воин Зена" как и впрочем большинство посетителей форума. Если не считать этого и я считаю этот форум лучшим по всему интернету в области программирования. И реально желаю вам и вашему сайту процветания.
    Аминь.

    PS:если вы вдруг подразумевали ни королеву воинов Зену, в чем я очень сомневаюсь, а к примеру Дзэн то правильно пишется он через Э (см. толковый или орфографический словарь)
     
  14. fr0b-p

    fr0b-p New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2006
    Сообщения:
    118
    ой мля... вот ща на 5+ написал ! =)) (не то что про клавой по башке гг )

    как я успел понять слова "даосизм" и "дзен" используются здесь подобно трудам ницше когда-то
     
  15. Onix-Studio

    Onix-Studio New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2006
    Сообщения:
    22
    Друзья!

    Я снова хочу спросит вас о перевороте битов.
    Разработка в Delphi, поэтому и код только в ней нужно написать.
    Для 32-разрядного мы с вами нашли решение:

    function Invert(x:integer):integer;
    begin
    x:=((x and $aaaaaaaa) shr 1) or ((x and $55555555) shl 1);
    x:=((x and $cccccccc) shr 2) or ((x and $33333333) shl 2);
    x:=((x and $f0f0f0f0) shr 4) or ((x and $0f0f0f0f) shl 4);
    x:=((x and $ff00ff00) shr 8) or ((x and $00ff00ff) shl 8);
    result:=(x shr 16) or (x shl 16);
    end;

    А для 64-разрядной переменной вот это:

    function Invert(x:int64):int64;
    begin
    x:=((x and $aaaaaaaaaaaaaaaa) shr 1) or ((x and $5555555555555555) shl 1);
    x:=((x and $cccccccccccccccc) shr 2) or ((x and $3333333333333333) shl 2);
    x:=((x and $f0f0f0f0f0f0f0f0) shr 4) or ((x and $0f0f0f0f0f0f0f0f) shl 4);
    x:=((x and $ff00ff00ff00ff00) shr 8) or ((x and $00ff00ff00ff00ff) shl 8);
    x:=((x and $ffff0000ffff0000) shr 16) or ((x and $0000ffff0000ffff) shl 16);
    result:=(x shr 32) or (x shl 32);
    end;


    не работает :dntknw:

    Я так понимаю, что операции сдвигов не проходят на 64-битные переменные. Но как же быть?
    Подскажите пожалуйста!