• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szybsze modulowanie przez 2

VPS Starter Arubacloud
+2 głosów
209 wizyt
pytanie zadane 31 sierpnia 2020 w C i C++ przez TlenekWodoru Użytkownik (520 p.)
Mam pytanie: Czy da się szybciej modulować przez takie liczby jak: 2,4,8,16,32...? Bo przecież dla komputera to jak return'owanie końcówki liczby. Jeśli się da to jaka jest na to komenda.

4 odpowiedzi

+2 głosów
odpowiedź 31 sierpnia 2020 przez adrian17 Ekspert (349,960 p.)
wybrane 4 grudnia 2020 przez TlenekWodoru
 
Najlepsza

Jeśli wartość modulo znasz z góry, to nic nie musisz robić - kompilator sam za Ciebie wykona taką optymalizację:

https://godbolt.org/z/xoETna

unsigned int modulo32(unsigned int num) {
    return num % 32;
}
modulo32(unsigned int):
        mov     eax, edi
        and     eax, 31
        ret

 

0 głosów
odpowiedź 31 sierpnia 2020 przez j23 Mędrzec (195,220 p.)

v &= (16 - 1);

0 głosów
odpowiedź 31 sierpnia 2020 przez jankustosz1 Nałogowiec (36,220 p.)

Żeby coś się dzieliło przez 2 ostatni bit musi być równy 0, aby przez 4 dwa ostatnie muszą być 0, przez 8 trzy ostatnie itd.

Tak jak napisał j23 można to zrobić w następujący sposób, sprawdźmy czy v dzieli się przez 16. 16 - 1 da w miejsca zer jedynki i jak teraz się zrobi and'a z liczbą to wyjdzie zero tylko wtedy gdy cztery ostatnie cyfry tej liczby to zera.

 

Podobne pytania

0 głosów
2 odpowiedzi 261 wizyt
pytanie zadane 30 grudnia 2019 w JavaScript przez BlvckFox Gaduła (4,240 p.)
0 głosów
2 odpowiedzi 903 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez Maciej Złotorowicz Gaduła (4,230 p.)

93,025 zapytań

141,990 odpowiedzi

321,292 komentarzy

62,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...