Napisałem program, który pozwoli mi i każdemu kto jeszcze tego nie ogarnia, zrozumieć przesunięcia bitowe.
#include <cstdio>
#include <cmath>
void binarne(int x, int y, bool lewo)
{
int n = int(log2(x))+1;
if(lewo == true)
x<<=y;
else
{
if(y >= n)
{
puts("Za dużo chciałeś przesunąć! Nie ma tak dobrze!");
return;
}
else
x>>=y;
}
n = int(log2(x))+1;
bool tab[n];
int i = n-1;
while(x > 0 && i >= 0)
{
if(x%2==0)
tab[i] = 0;
else
tab[i] = 1;
x/=2;
i--;
}
for(int i = 0; i < n; i++)
tab[i] ? printf("1") : printf("0");
puts("");
}
int main()
{
int a, b;
puts("Podaj liczbe w systemie dziesietnym: ");
scanf("%d", &a);
puts("Podaj o ile przesunac liczbe: ");
scanf("%d", &b);
puts("Oryginalna liczba w systemie dwójkowym: ");
binarne(a, 0, 0);
puts("Przesunięta w lewo liczba w systemie dwójkowym: ");
binarne(a, b, 1);
puts("Przesunięta w prawo liczba w systemie dwójkowym: ");
binarne(a, b, 0);
}
Testujcie, subskrybujcie (
), kompilujcie, błędy zgłaszać w tym temacie.