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

operatory bitowe - liczenie bitów

0 głosów
708 wizyt
pytanie zadane 10 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)

Napisałem program który zlicza bity ustawione i nieustawione - poprawnie. Niestety wywala mi na testach taki oto błąd i nie wiem jak sobie z tym poradzić :( 

functions.h:35:57: error: lvalue required as left operand of assignment
     for (*pointer_to_bits_set_counter = 0; value; value >>= 1)\
                                                         ^~~
unit_test_v2.c:2905:13: note: in expansion of macro ‘COUNT_BITS’
             COUNT_BITS(79 + 33, &bits_set, &bits_cleared);
             ^~~~~~~~~~
functions.h:35:57: error: lvalue required as left operand of assignment
     for (*pointer_to_bits_set_counter = 0; value; value >>= 1)\
                                                         ^~~
unit_test_v2.c:2911:13: note: in expansion of macro ‘COUNT_BITS’
             COUNT_BITS(79 + 33, &bits_set, &bits_cleared);

 

KOD: 

#define COUNT_BITS(value, pointer_to_bits_set_counter, pointer_to_bits_cleared_counter){\
    for (*pointer_to_bits_set_counter = 0; value; value >>= 1)\
        *pointer_to_bits_set_counter += value & 1;\
    int zm=sizeof(value); * pointer_to_bits_cleared_counter=zm*8-*pointer_to_bits_set_counter ;\
}

wywołanie: 

 unsigned int liczba;
        unsigned int* wow = &liczba;
        if (scanf("%u", wow) != 1)
        {
            printf("Incorrect input"); return 1;
        }
        COUNT_BITS(*wow, wa, wb);
        printf("%d\n%d", *wa, *wb); printf("\n");

 

 

komentarz 10 sierpnia 2020 przez adrian17 Mentor (355,220 p.)
edycja 10 sierpnia 2020 przez adrian17

wywołanie: 

COUNT_BITS(*wow, wa, wb);

...nie, to nie jest to wywołanie. Kompilator nawet pokazuje wywołanie na którym się wywala:

COUNT_BITS(79 + 33, &bits_set, &bits_cleared);

I nic dziwnego, bo makro się wtedy rozwija to

79 + 33 >>= 1;

Co nie ma sensu. Czemu to w ogóle jest makro...? (a jak makro, to po co wskaźniki)

komentarz 10 sierpnia 2020 przez fortuna Początkujący (310 p.)

Jest to makro, bo taką mam treść zadania. Nadal nie ogarniam jak to przeprawić...

Jest wskaźnik, bo main ma działać na takiej zasadzie:

Enter data type: 1⏎
Enter an integer number: 4108⏎
3⏎
13⏎

Podaje najpierw typ: unsigned int, unsigned short lub unsigned long, potem liczbę i wyswietla mi się liczba bitow ustawionych i nie

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 552 wizyt
pytanie zadane 10 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)
+1 głos
1 odpowiedź 1,277 wizyt
pytanie zadane 19 czerwca 2021 w JavaScript przez greg456 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 695 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,420 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...