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

question-closed Jak działa inkrementacja a jak działa bitowa alternatywa

Object Storage Arubacloud
0 głosów
501 wizyt
pytanie zadane 15 kwietnia 2023 w C i C++ przez snajper414 Nowicjusz (140 p.)
zamknięte 15 kwietnia 2023 przez snajper414

Witajcie!


Uczę się C++ z nową symfonią i trochę się bawię na różnych głupich przykładach aby zrozumieć to i owo. Teraz robię własny generator liczb losowych budujący wyrazy z pojedynczych bitów :) Naszło mnie jednak pytanie wręcz egzystencjalne i nie mam pojęcia do którego działu je skierować. A pytanie brzmi:

Zakładając że ostatni bit w zmiennej jest zawsze zerem, to jaka jest wtedy różnica pomiędzy zwykłą inkrementacją: ++ a bitową alternatywą: |1 ?

Chodzi mi nie o wynik działania, ale o to jak dokładnie kompilator (oraz ALU procesora) je przeprowadzi. Pytam się czy jest jakaś różnica pomiędzy dodawaniem a inkrementacją? Albo między inkrementacją a opisanym wyżej przypadkiem?

Wiem, że bitor porówna każdą parę bitów i zwróci dodatkowy wyraz. Jak jednak przebiega operacja dodawania? Czy jest bardziej złożona (zasobożerna) od bitowej alternatywy?

Oraz:

Czy inkrementacja to dosłownie suma wyrazu w zmiennej oraz stałej dosłownej reprezentowanej przez pojedynczy bit na końcu? A może owo działanie jest przeprowadzane jakoś bardziej pomysłowo (szybciej)?

Szukałem co nieco... Ale większość opisów mówi tak: "Procesor posiada jednostkę która służy do dodawania". Koniec opisu. indecision

Ktoś ma jakiś ciekawy link lub źródło gdzie owe działania byłyby opisane dokładniej od strony "kuchni"? Byłbym wdzięczny! :)

Pozdrawiam!


 

komentarz zamknięcia: Kompilator z linka od tkz daje odpowiedź na pytania które zadałem.
1
komentarz 15 kwietnia 2023 przez tkz Nałogowiec (42,000 p.)
https://godbolt.org/ sprawdź sam, ale podpowiem, że przy optymalizacji kompilatorów, to żadna.
komentarz 15 kwietnia 2023 przez snajper414 Nowicjusz (140 p.)
Wow, nie widziałem jeszcze takiego kompilatora. Serdecznie dziękuję!

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia 2023 przez tangarr Mędrzec (154,860 p.)
Inkrementacje musisz rozważać w dwóch wersjach: preinkrementacja i postinkrementacja. Teoretycznie obie instrukcje powinny wygenerować inny kod, ale w zależności od sposobu użycia kompilator może zoptymalizować postinkrementację do preinkrementacji. Preinkrementacja (jeżeli nie zostanie przeciążona) to po prostu dodanie 1 do zmiennej.
Alternatywa bitowa nie sprawdza wartości bitów aby się wykonać.
@tkz dał ci świetny link do sprawdzania do jakiej postaci zostanie skompilowany twój kod. Polecam porównać wynik bez optymalizacji jak i z włączonymi optymalizacjami (flagi -O1, -O2 lub -O3).
komentarz 15 kwietnia 2023 przez snajper414 Nowicjusz (140 p.)
O tych dwóch sposobach inkrementacji już wiedziałem natomiast byłem po prostu ciekaw jak to wszystko się kompiluje na kod programowy. Powyższy link to fajne narzędzie i zaraz wszystko sobie potestuję. Dziękuję za odpowiedź :) Zamykam.

Podobne pytania

0 głosów
1 odpowiedź 516 wizyt
0 głosów
2 odpowiedzi 1,402 wizyt
pytanie zadane 7 listopada 2022 w Python przez niezalogowany
+1 głos
0 odpowiedzi 358 wizyt
pytanie zadane 12 marca 2022 w C i C++ przez Bilib Użytkownik (990 p.)

92,702 zapytań

141,615 odpowiedzi

320,180 komentarzy

62,062 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...