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

question-closed <C> Czy liczbę binarną można wczytać tylko za pomocą tablicy?

Object Storage Arubacloud
+5 głosów
1,009 wizyt
pytanie zadane 9 kwietnia 2015 w C i C++ przez niezalogowany
zamknięte 9 kwietnia 2015
Witam. Napisałem program, który wczytuje dwie liczby binarne do dwóch różnych tablic:

http://wklej.org/id/1683875/

W zamierzeniu jak skończę ma on przeprowadzać operację na bitach, ale póki co crashuje mi na koniunkcji. Pytania:

1. Gdzie jest błąd?

2. Jaki jest najlepszy sposób na wczytanie liczby binarnej?

3. Przy okazji, czy jest jakaś strona gdzie mogę poczytać o ciekawych zastosowaniach operatorów bitowych?
komentarz zamknięcia: int zajmuje 4 bity, a char 1. Dlatego operacja bitowa nie działała

2 odpowiedzi

+1 głos
odpowiedź 9 kwietnia 2015 przez Kabotyn Mądrala (5,650 p.)
wybrane 9 kwietnia 2015
 
Najlepsza

A co ma w Twojej funkcji robić ten kod:

for(l = 0; l < 2; l++){
     for(m = 0; m < 2; m++){
         printf("%i", wynik[k]);
         k++;
     }
     printf(" ");
}

Czego się po nim spodziewasz?

Zauważ, że w

wynik[l] = liczba1[l]&liczba2[l]; /* koniunkcja bitowa */

zmienne liczba1 i liczba2  są typu integer, więc tak naprawdę nie robisz w tej operacji koniunkcji bitowej, dla jednego bitu  ale dla całego bajtu, którym jest liczba int w zmiennej liczba1[l].

Dla wartości 8 bitowych zamiast int w argumencie funkcji sprobuj użyć unsigned char i wtedy nie muszisz traktować tego jak tablicę (bo unsigned char jest 8 bitowy). Jedynie co to będziesz musiał poszukac w google (bo ja z pamięci Ci nie powiem) jak wyświetlić unsigned char jako 8 bitów (zero i jedynek).

Byłoby to coś w stylu:

unsigned char c1, c2, wynik_koniunkcji;
c1 = 100;
c2 = 200;

wynik_koniunkcji = c1 & c2;

Zmienna wynik_koniunkcji zawiera koniunkcje liczb w c1 i c2 (pamietaj, że to char wiec wartosci sa 8 bitowe).

Mam nadzieję, że się nie mylę ;-)

komentarz 9 kwietnia 2015 przez Kabotyn Mądrala (5,650 p.)

Właśnie zauważyłem, że niżej w kodzie uzytkownik wpisuje Ci 0 lub 1. Więc przyda Ci się jeszcze funkcja aby zamienić to na unsigned char.

komentarz 9 kwietnia 2015 przez niezalogowany
Dziękuje bardzo za podpowiedź
+1 głos
odpowiedź 9 kwietnia 2015 przez daan Pasjonat (17,640 p.)
edycja 9 kwietnia 2015 przez daan

To, że piszesz w C jest wymogiem jak rozumiem ? Bo C++ wprowadza nam klase std::bitset, która jest jak nazwa wskazuje jest zbiorem bitów :D bez problemu poradzi sobie z operacjami na bitach :P

#include <iostream>
#include <bitset>

int main()
{
   std::bitset<8> liczba = 10010100;
   std::cout << liczba.to_string() << std::endl; 
   return 0;
}

Podobne pytania

0 głosów
0 odpowiedzi 151 wizyt
pytanie zadane 22 sierpnia 2021 w Python przez osobliwy nick Użytkownik (900 p.)
0 głosów
1 odpowiedź 980 wizyt
0 głosów
2 odpowiedzi 870 wizyt

92,615 zapytań

141,465 odpowiedzi

319,774 komentarzy

61,996 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...