używałem std::bitset<N>
w moim programie i potrzebne do znalezienia najmniej znaczący ustawiony bit i zrobił to trywialne obliczenia jak poniżej:Czy istnieje trywialny sposób, aby uzyskać 2 za uzupełnienie std :: bitset <N>
int num = 5;
int res = num & (-num);
Po czym najmniej znaczący bit num
jest ustawiony na res
i pozostałe są 0
. Działa to jako -5
jest reprezentowane w notacji uzupełnienia 2-go.
Ale znalazłem std::bitset<N>
nie ma przeciążenia operatora dla unary operator -
, który dałby mi uzupełnienie 2 dla podstawowych bitów. Czy istnieje prosty sposób implementacji uzupełnienia dwójki z std::bitset<N>
? Zawsze mogłem użyć operator ~
, aby odwrócić bity i wykonać pętlę, wykonując sumę i przenoszenie, zaczynając od LSB na MSB, ale szukałem rozwiązania, które by tego uniknęło.
Z pewnością istnieje wiele ** nietrywialnych ** sposobów robienia niemal wszystkiego! – rodrigo
Zauważyłem, że powinienem był użyć __trivial__ :-p Dokonam edycji tytułu. – vvnraman
Zauważ, że zapętlanie nad odwróconym bitsetem jest najprawdopodobniej tak szybkie, jak zwykłe zapętlenie nad oryginalnym bitsetem w celu znalezienia najmniej znaczącego bitu (co znajduję w tym przypadku trywialne rozwiązanie;)) – Zeta