Løsningsforslag - oppgaver i Vedlegg A.1.2


Oppgave 1

import bitio.BitInputStream;
import java.io.*;

public class Program
{
  public static void main(String... args) throws IOException
  {
    byte[] b = {103,89,110,-27,98,-100};  // bitsekvensen i Figur A.1.1 a) 
    BitInputStream inn = BitInputStream.fromByteArray(b);
    int k = 3;

    for (int biter = inn.readBits(k); biter != -1; biter = inn.readBits(k))
    {
      System.out.print(biter + " ");        // skriver ut bitene som et heltall
    }

    int r = inn.availableBits();            // antall biter som er igjen
    if (r > 0)
      System.out.println(inn.readBits(r));  // leser resten

    inn.close();  // Utskrift: 413 406 953 354 156

  } // main

} // Progam

Oppgave 2

import bitio.BitInputStream;
import java.io.*;

public class Program
{
  public static void main(String... args) throws IOException
  {
    byte[] b = {103,89,110,-27,98,-100};  // bitsekvensen i Figur A.1.1 a) 
    BitInputStream inn = BitInputStream.fromByteArray(b);

    int k = inn.readBits(16);    // de første 16 bitene
    k <<= 16;                    // bitforskyver
    k |= inn.readBits(16);

    System.out.println(k);       // Utskrift: 1733914341

    int filter = -1 >>> 24;      // 0000......00011111111
    for (int i = 0; i < 4; i++)  // fire ganger
    {
      System.out.print((byte)(k & filter) + " ");
      k >>>= 8;
    }

    inn.close();  // Utskrift: -27 110 89 103

  } // main

} // Progam

Hvis en vil lese 31 biter første gang og så 1 bit, må de tre programlinjene endres til:

    int k = inn.readBits(31);    // de første 31 bitene
    k <<= 1;                     // bitforskyver
    k |= inn.readBits(1);

Oppgave 3

byte[] b = {-1, -1, -1, -1, -1, -1};