Løsningsforslag - oppgaver i Avsnitt 1.7.14


Oppgave 3

Hvis 2k-1 <= n < 2k, vil k – 1 <= log2(n) < k. Dermed vil avrundingen av log2(n) nedover til nærmeste heltall være lik k – 1. Videre er antall signifikante binære siffer lik k for alle n slik at 2k-1 <= n < 2k. Tilsammen gir dette Setning 1.7.14 b).

Oppgave 5

  public static int antallLedendeNuller2(int n)
  {
    int antall = 32;           // n = 0 har 32 0-biter

    while (n != 0)
    {
      antall--;                // en ledende 0-bit mindre
      n >>>= 1;                // skyver bitene i n en mot høyre
    }
    return antall;
  }

Oppgave 6

  public static int antallLedendeNuller(int n)
  {
    if (n == 0) return 32;

    int antall = 0;

    for (int k = 16; k > 0; k >>= 1)
    {
      if (n >>> k == 0) antall += k; else n >>>= k;
    }

    return antall;
  }

Oppgave 7

  public static int antallLedendeNuller(int n)
  {
    int antall = 32;
    if (n >>> 16 != 0) { antall -= 16; n >>>= 16;}
    if (n >>> 8 != 0) { antall -= 8; n >>>= 8;}
    if (n >>> 4 != 0) { antall -= 4; n >>>= 4;}
    if (n >>> 2 != 0) { antall -= 2; n >>>= 2;}
    if (n >>> 1 != 0) return antall - 2;
    return antall - n;
  }

Oppgave 9

  public static int førsteEnBit(int n)
  {
    for (int k = 1; k <= 16; k <<= 1)
      n |= (n >> k);
    return n ^ (n >>> 1);
  }

Oppgave 10