[C++] Przesuwanie o liczbę ujemną

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1375
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] Przesuwanie o liczbę ujemną

Post autor: Luminofor » 26 mar 2009, 23:38

Witam, czy da się operatorami binarnymi << i >> przesuwać o liczbe ujemną?
Np. czy poprawny jest następujący kod:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()
{
	int a=65535;
	a>>=-1;
	return 0;
}

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 26 mar 2009, 23:41

Nie możesz po prostu sprawdzić tego w praktyce?

Jeśli się nie da, zawsze możesz zrobić if'a

if(przesuniecie dodatnie) cos_tam>>przesuniecie, else os_tam<<((-1)*przesuniecie);

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1375
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 26 mar 2009, 23:43

W praktyce przypisuje zmiennej a wartość 0.
A czy przesuwanie np. w prawo o -3 to nie to samo co w lewo o 3?

Kuna
Użytkownik
Posty: 130
Rejestracja: 26 lip 2008, 11:03
Lokalizacja: w-wa

Post autor: Kuna » 27 mar 2009, 8:07

Skompiluj sobie w taki programik

Kod: Zaznacz cały

#include <stdio.h>
#include <iostream.h> 
 
 
int main(int argc,char **argv) 
{    
    unsigned int liczba = 16;
    
    printf("wartosc poczatkowa: %d\n", liczba);
    
    liczba = liczba << 1;
    printf("liczba << 1 = %d\n", liczba);
    
    liczba = liczba >> 1;
    printf("liczba >> 1= %d\n", liczba);
    
    liczba = liczba >> -1;
    printf("%d\n", liczba);
 
    printf("\n");
    system("PAUSE");
     
    return 0;

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 27 mar 2009, 8:41

Luminofor pisze: A czy przesuwanie np. w prawo o -3 to nie to samo co w lewo o 3?
No wlasnie nie to samo poniewaz liczba 3 w systemie binarnym to 11 a liczba -3 to taka sama liczba tylko że ze znakiem ujemności przed liczbą a więc w zależności ilu to bitowa liczba to bedzie wyglądala 100000011 dla liczby ośmiobitowej. Prawdopodobnie ma to zwiazek wlasnie z tym poniewaz kompilator nie jest przystosowany do przesuwania o liczby ujemne traktuje taką liczbe jako całość dodatnia i poprostu sie gubi

alaris
Użytkownik
Posty: 531
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 27 mar 2009, 15:41

grysek67 pisze:liczba to bedzie wyglądala 100000011
Nie bardzo...
-1 => 255
-2 => 254
-3 => 253
(...)
Jest to tzw. uzupelnienie do dwoch (U2)

ODPOWIEDZ