Ciągi bitów

0

Przypuscmy, ze typ float jest zgodny z formatem binary16 ze standardu IEEE 754{2008
(b = 2, p = 11, emax = 15), a typ int jest kodowany w U2 na 32 bitach.

  1. Niech x bedzie zmienna typu int. Dla jakich wartosci zmiennej x, ktore naleza do przedzialu [1; 28] wyrazenie
    ((-1<<x)&(x+2))==0
    jest prawdziwe?

Czy ktoś mógłby dać jakieś wskazówki, jak się za to zabrać? Bo powiem szczerze że nie wiem. Wiem, że żeby to prawdziwe, to wartośc logiczna obu czynników musi być równa 0, ewentualnie 1 i 0 lub 0 i 1, ale właśnie nie wiem zbytnio jak do tego dojść, byłbym wdzięczny za każda pomoc.

0

for(int x=1;x<=28;++x) if(((-1<<x)&(x+2))==0) cout<<x<<endl;

dla 1 będzie to: 11...1110 & 00...0011 drugi bit nie wyzeruje się
dla 2 będzie to: 11...1100 & 00...0100 trzeci bit nie wyzeruje się
dla 3 będzie to: 11...1000 & 00...0101 wszystko się wyzeruje
dla większych od 3 dolne bity pierwszego operandu będą się zwalniać szybciej niż drugi operand zajmować kolejne starsze bity.

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