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