Kombinacja zer i jedynek w jednym bajcie

0

Cześć,

Potrzebuję wypisać wszystkie możliwe kombinacje zer i jedynek mieszczące się w 8-mio bitowym słowie. Jak wiadomo, możliwości jest 256 z wyjątkiem samych zer i samych jedynek. Teraz mam dwa zamysły, lecz nie wiem który jest poprawny:

  • losowanie 8 bitów do tablicy i sprawdzanie czy tablica ta się nie powtarza do momentu, aż uzyskam 256 możliwości,
  • utworzenie dwóch tablic, jedna z samych zer, druga z samych jedynek i zamienianie ich kolejności w trzeciej tablicy (teraz jak o tym myślę, wydaje mi się, że może to być zły pomysł)

Czy możecie mi doradzić, która droga postępowania jest właściwa/najbliżej prawdy?

Właśnie znalazłam "fajny" gif dokładnie opisujący to, czego potrzebuję. I chyba to będzie najwłaściwsze rozwiązanie. Chociaż...

1

A zwykłe wypisanie liczb od 0 do 255 (binarnie) nie zadziała?

3
tranzystorek napisał(a):

Cześć,

Potrzebuję wypisać wszystkie możliwe kombinacje zer i jedynek mieszczące się w 8-mio bitowym słowie. Jak wiadomo, możliwości jest 256 z wyjątkiem samych zer i samych jedynek.

Nie, możliwości jest 256 wliczając same zera i same jedynki. Wyłączając te dwie wartości zostaje możliwości 254.

Jeśli chcesz wypisać wszystkie to pod forem od 0 do 255 wypisuj liczby w formacie binarnym. I tyle.

2

W C# możesz to łatwo osiągnąć.

var binaryValues = Enumerable.Range(0, 256)
							 .Select(x => Convert.ToString(x, 2).PadLeft(8, '0'))
							 .ToArray();

Drugi parametr metody Convert.ToString mówi o tym, na jaki system liczbowy chcesz przekonwertować wartość.

1

wszystkie możliwe kombinacje
...
losowanie 8 bitów do tablicy i sprawdzanie czy tablica ta się nie powtarza do momentu, aż uzyskam 256 możliwości,

To słaby pomysł. Czekać aż się wylosuje liczba... A co jeśli będziesz chciała wypisać wszystkie liczby w 32 bitach? Będziesz czekała aż się wylosują 4 miliardy liczb? To nie jest żaden sposób (chociaż przy tylko 256 możliwościach faktycznie mógłby się udać jeszcze).

utworzenie dwóch tablic, jedna z samych zer, druga z samych jedynek i zamienianie ich kolejności w trzeciej tablicy

Nie potrzebujesz (jeśli możesz po prostu wyświetlić tę liczbę w postaci zerojedynkowej, jak już ci napisali).

Swoją drogą jakby to miało działać? Prędzej, jeśli chcesz zrobić overengineering, to mogłabyś zrobić coś w stylu "ośmioelementowa tablica, z elementami 0 albo 1" i ręczne dodawanie liczb (taki symulator procesora/dodawania na kartce - patrzymy czy dany element tablicy jest zerem, jeśli tak to ustawiamy na jeden, a jeśli jest już jeden, to ustawiamy na zero i przesuwamy kolejną cyfrę na 1...). Ale znowu, nie jest to potrzebne, jeśli już w języku masz konwerter (jak @Fuffu wspomniał, bo ja tam na C# się nie znam i nie wiem co on tam ma).

Ew. mogłabyś również dla sportu - napisać własny konwerter liczb do zerojedynkowego stringa - działając na operacjach bitowych(przelatywać po bitach i wykonywać na nich operację and, porównując z odpowiednią maską bitową, która będzie przesuwana za każdą iteracją, żeby złapać kolejne cyfry - i potem na podstawie tego dodawać albo znak 0 albo 1 jako kolejną cyfrę w stringu). A zawsze warto mieć jakiś obraz, w jaki sposób działają liczby w komputerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1