NTY WYRAZ LICZBY W SYSTEMIE BINARNYM

0

Witam czy ktos moglby mi pomoc w programie ktory wypisywalby n ty wyraz liczby zapisanej w sposob binarny? Nie wiem nawet jak matematycznie to zapisac. To znaczy same liczby potrafie, ale operacje wyczytywania ntej liczby w liczbie juz nie.

3

Będzie ciężko pomóc, bo nie wiemy o co Ci chodzi. Liczba nie składa się z wyrazów tylko cyfr. Podaj może przykładowe wejście, wyjście z programu i kod, jak próbujesz to rozwiązać.

1

n ty wyraz liczby zapisanej w sposob binarny

Czyli np. dla liczby binarnej 1010101001101 czwartym wyrazem tej liczby jest (?)

0

Zakładam, że przez n ty wyraz liczby i nta liczba w liczbie rozumiesz nty bit liczby.
Najprostszym podejściem będzie użycie std::bitset<>, ale patrząc na treść zadania i to, że masz dwa posty zakładam, że dostałaś to w szkole i użycie bitset<> będzie za dużym szokiem dla nauczyciela.

Dobrze kombinujesz, musisz użyć przesunięć bitowych. Pokaż kod, który napisałaś do tej pory, to będziemy mogli zobaczyć co skopałaś.

0

Wystarczy chyba wykonać right shift o numer bitu, jaki chcemy dostać, dla longa od 0 do 63 i zrobić bitwise AND tego z jedynką.

0
polka123 napisał(a):

... ale operacje wyczytywania ntej liczby w liczbie juz nie.

Gdzieś koło pierwszej-drugiej klasy dziecko ma pogląd, czym się różni liczba od cyfry

stryku napisał(a):

Najprostszym podejściem będzie użycie ...
Dobrze kombinujesz, musisz użyć ...

Zakładasz, że rozumiesz o co chodzi?

0

pewnie chodzi o coś takiego lub podobnego:

std::bitset<32>{x}.test(32-n);
0

Możesz to zrobić na dwa sposoby:
W przykładzie poniżej bity pobierane są od prawej do lewej strony. Jeżeli chcesz wykorzystać kod w swoim zadaniu musisz zmienić kierunek na przeciwny.
Powodzenia.

// C++17
#include <iostream>
#include <bitset>
#include <limits>
#include <optional>

using namespace std;

auto getNthBitOfNumber( int number , int nth )
{
    const auto max_digit { numeric_limits<int>::digits };
    return ( nth>max_digit || nth<1 ) ? nullopt : make_optional<string>( bitset<max_digit>(number).test(nth-1)?"1"s:"0"s );
}

auto getNthBitOfNumberWithBitShift( int number , int nth )
{
    const int mark {1<<(nth-1)};
    return ( mark>number || nth<1 ) ? "Out of number range."s : (mark&number) == 0 ? "0"s :"1"s;
}

int main()
{
    cout <<  getNthBitOfNumber(4567,5).value_or("Out of number range.") << endl;
    cout <<  getNthBitOfNumberWithBitShift(4567,5) << endl;
}
0

Możesz to zrobić na dwa sposoby

Niekoniecznie, można też zwykłą toporną pętlą, też od prawej do lewej:

int get_nth_bit(int number, int position /* 0 - 31 */) {
  while (position--) {
    number /= 2;
  }
  return number % 2;
}

int main()
{
    // 12 = 0b1100
    std::cout << get_nth_bit(12, 0) << "\n"; // 0
    std::cout << get_nth_bit(12, 1) << "\n"; // 0
    std::cout << get_nth_bit(12, 2) << "\n"; // 1
    std::cout << get_nth_bit(12, 3) << "\n"; // 1
    return 0;
}
0

po co te biblioteki:#include <bitset>
#include <limits>
#include <optional>? nie znam ich za bardzo

0
#include <iostream>
#include<stdlib.h>
using namespace std;

int wartoscbitu(int liczba,int n)
{
    if(n<0)
{
return 0;
}
int potega=2^n;
if((liczba&potega)!=0)
{
    return 1;
}
else
    return 0;
}
int main()
{
   cout<< wartoscbitu(2,0);
}

ja zrobilam cos takiego, dziekuje za podeslanie "gotowcow ale czy bylby ktos tak uprzejmy i moglby zobaczyc gdzie tu w moim rozumowaniu jest blad? Nie moge go znalezc i program nie dziala poprawnie

0
int potega=2^n;

Poczytaj o operatorach bitowych, to nie jest potęgowanie. Jeśli już, to chcesz użyć 1 << n aby zapalić n-ty bit.

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