Witam wszystkich serdecznie,
Jestem początkującym użytkownikiem C++ i obecnie skupiam się na operacjach bitowych w tym języku.
Chcę napisać program, który będzie sprawdzał czy liczba jest bitowym (32 bit) palindromem, czyli jej reprezentacja bitowa czytana od lewej i prawej strony są sobie równe.
Pomyślałem, że utworzę dwie maski, maskę R=0x00000001; oraz maskę L=0x80000000;, a następnie będę stosował iloczyn logiczny masek z liczbą aby sprawdzić czy są sobie równe, w przeciwnym wypadku przerywamy pętlę i wiemy ze liczba nie jest palindormem.
Niestety, nie wiem dlaczego w wynikach iloczynów otrzymuje prawdopodobnie kolejne potęgi dwójki zamiast "1".
np dla liczby 21 : (na przzemian lewy i prawy iloczyn):
1
0
0
0
4
0
0
0
16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Taki mam program testowy:
#include<iostream>
using namespace std;
int main()
{
unsigned int maskL=0x80000000;
unsigned int maskR=0x00000001;
int liczba;
cin>>liczba;
for(int i=0;i<sizeof(int)*4 ;i++)
{
cout<<(liczba&maskR)<<endl<<(liczba&maskL)<<endl;
maskR=maskR<<1;
maskL=maskL>>1;
}
Czy ktoś jest w stanie wytłumaczyć te wyniki iloczynów logicznych?
Pozdrawiam