równanie bitowe

0

Witam mam problem z jednym zadaniem.

Niech x będzie zmienną typu int. Dla jakich wartości zmiennej x, które należą do przedziału [1.28] wyrażenie ((-1<<x))&(x+2)==0 jest prawdziwe? Typ int jest kodowanu w u2 na 32 bitach.

jako że, aby koniunkcja bitowa miała wartość zero, to zerowe muszą być oba wyniki, ewentualnie jeden z nich. No i dochodzę do miejsca gdzie x+2=0, czyli ]x=-2 czyli nie należy do przedziału i -1<<x, czyli x<<1 no i tutaj pasuje tylko 0 według mnie, czyli też spoza przedziału. Jeśli ktoś mógłby pomóc byłbym bardzo wdzięczny.

0
TheHurricane napisał(a)

aby koniunkcja bitowa miała wartość zero, to zerowe muszą być oba wyniki, ewentualnie jeden z nich

hmmm ciekawe?
Czyta:
http://en.wikipedia.org/wiki/Bitwise_operation
http://msdn.microsoft.com/en-us/library/z0zec0b2(v=VS.100).aspx
Rozumie?
Umie już poprawnie zinterpretować?

0

czyta, rozumie, nie umie zinterpretować:)

0

Po rozpisaniu kilku liczb od razu widać (przykład na 8 bitów):

x -1 << x x + 2 (-1 << x) & (x + 2)
1 11111110 00000011 2
2 11111100 00000100 4
3 11111000 00000101 0
4 11110000 00000110 0
5 11100000 00000111 0
6 11000000 00001000 0
(x + 2) musi mieć włączony bit przynajmniej na pozycji x + 1, żeby równość nie zachodziła, to znaczy, że (x + 2) musi być mniejsze niż (1 << x) dla zerowej koniunkcji
więc x + 2 < (1 << x)
x + 2 < x^2
(x - 2)(x + 1) < 0
x > 2 lub x < -1
w przedziale 1..28 - x >= 3
są to więc wartości 3..28
0
iooi napisał(a)

(x + 2) musi mieć włączony bit przynajmniej na pozycji x + 1, żeby równość nie zachodziła, to znaczy, że (x + 2) musi być mniejsze niż (1 << x) dla zerowej koniunkcji
więc x + 2 < (1 << x)
x + 2 < x^2

Jakbyś mógł wyjaśnić skąd wziąłeś te dwie pierwsze linijki przekształcenia, byłbym bardzo wdzięczny bo już chyba jestem blisko załapania tego.

0

Oj, źle napisałem.
x + 2 < -(-1 << x) - to taka obserwacja - w tym przypadku (x + 2) i (-1 << x) nie będą miały wspólnych bitów włączonych
x + 2 < (1 << x)
x+2 < 2^x - tutaj namieszałem
Reszta jednak się zgadza dla dodatnich: http://www.wolframalpha.com/input/?i=solve+x%2B2%3C2^x+over+the+integers

0

ok dziękuje bardzo, myśle że już sobie z tym poradzę:)

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