[C] 2 dowody w ramach całkowitoliczbowej U2

0

Witam,
Czy ktoś mógłby wyjaśnić mi jak zrobić to zadanie :

Niech x będzie zmienną typu int w C przechowywaną w systemie uzupełnień do dwu na n bitach.
Udowodnij, _ze wyrażenia

  1. (x>0) && (x==(x&-x))

  2. x && !(x&(x-1)))

są prawdziwe wtedy i tylko wtedy, gdy zmienna x przyjmuje
wartość, która jest potęgą liczby 2^2

W podpunkcie 1 wiem, że gdy założymy, że x jest potęgą 2 to x>0 jest prawdą...
x&-x w reprezentacji U2 wychodzi : [000...1...000] ale nie wiem dlaczego to się ma równać x ?

Za wszelką pomoc z góry dziękuję ;]

0

a i A, x i X to rozne symbole

x=2^n => {x>0, x==[00..0001000..000]} => -x == [11..1111000..000] => x&-x = [00..0001000..000]&[11..1111000..000] == x

x!=2n => {x=2(n+1)-e, e!=2N} => {x=2n + E, E>0, E=[00..0000abc..xyz] } => {x>0, x==[00..0001abc..xyz]} => -x == [11..1110ABC..XYZ] => x&-x = [00..0001abc..xyz]&[111..110ABC..XYZ] == [00..0000???..???] != x

x=2^n => {x!=0, x==[00..0001000..000]} => x-1==[00..0000111..111] => !( x&(x-1) ) = !(0)

x!=2n => {x=2(n+1)-e, e!=2N} => {x=2n + E, E>0, E=[00..0000abc..xyz] } => {x>0, x==[00..0001abc..xyz]} => x-1 == [00..0001ABC..XYZ] => x&-x == [00..0001???..???] != 0

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