Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
-
Luminofor
- Użytkownik
- Posty: 1373
- Rejestracja: 27 lis 2007, 17:17
- Lokalizacja: Polska
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);
-
Luminofor
- Użytkownik
- Posty: 1373
- 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;
-
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: 530
- 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)