Reprezentacja bitowa liczb (operacje na bitach)

0

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

0

& to normalna operacja && dla każdej pozycji bitu osobno (albo iloczyn tych bitów).

3

Zastanów się na prostszym przykładzie. Np. 192 i 96

192 96 &
20 0 0 0
21 0 0 0
22 0 0 0
23 0 0 0
24 0 0 0
25 0 1 0
26 1 1 1
27 1 0 0

Jak widać wynikiem jest 64 (010000002). Jest tak ponieważ jedyny zapalony bit znajduje się na siódmym miejscu (reprezentującym mnożnik 26)

Aha, w C++ logicznymi nazywa się operatory operujące wyłącznie na prawdzie/fałszu i wartościach do nich erodujących - && i ||, a &, ^ i | to operatory bitowe - działające na poszczególnych bitach, jak widać wyżej.

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