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.

- Rejestracja:ponad 11 lat
- Ostatnio:ponad rok
- Postów:607
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ś.

- Rejestracja:około 8 lat
- Ostatnio:mniej niż minuta
- Postów:4884
Wystarczy chyba wykonać right shift o numer bitu, jaki chcemy dostać, dla longa od 0
do 63
i zrobić bitwise AND
tego z jedynką.

- Rejestracja:ponad 6 lat
- Ostatnio:około 11 godzin
- Postów:3561
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?

- Rejestracja:prawie 10 lat
- Ostatnio:około 12 godzin
- Postów:530
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;
}


- Rejestracja:około 8 lat
- Ostatnio:mniej niż minuta
- Postów:4884
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;
}

- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:12
po co te biblioteki:#include <bitset>
#include <limits>
#include <optional>? nie znam ich za bardzo

getNthBitOfNumber
do odpowiednio bitset
, numeric_limits
oraz make_optional
. Druga funkcja nie wymaga ich użycia.
- Rejestracja:ponad 4 lata
- Ostatnio:około 3 lata
- Postów:12
#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

- Rejestracja:ponad 11 lat
- Ostatnio:około 7 godzin
- Lokalizacja:Szczecin
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.