Løsningsforslag - oppgaver i Vedlegg A.3.7


Oppgave 1

Short-verdien beregnes slik: 5·256 + 6 = 1286.

Oppgave 2

Det enkle først: Den boolske verdien blir true siden det kun er 0 som gir false og byte-verdien blir -7.

De to bytene som utgjør short-verdien er -5 og -6. Dette er negative tall og har dermed 1 som fortegnsbit. Regnet uten fortegn vil de åtte bitene i -5 bli 256 - 5 = 251 og de i -6 bli 256 - 6 = 250. Tar vi de 16 biten som short-verdien utgjør, får vi 251·256 + 250 = 64506 uten fortegn. Men med fortegn blir det 64506 - 256·256 = 64506 - 65536 = -1030.

Vi kan gjøre på tilsvarende måte for de fire første bytene. Dermed 255·2563 + 254·2562 + 253·256 + 252 - 2564 = -66052.

Oppgave 3

  public static void tabellutskrift(int[][] a, String filnavn) throws IOException
  {
    DataOutputStream ut = new DataOutputStream(new FileOutputStream(filnavn));

    int m = a.length, n = a[0].length;

    ut.writeInt(m); ut.writeInt(n);  // tabelldimensjonen

    for (int i = 0; i < m; i++)
    {
      for (int j = 0; j < n; j++)
      {
        ut.writeInt(a[i][j]);
      }
    }

    ut.close();
  }

  public static int[][] tabellinnlesing(String filnavn) throws IOException
  {
    DataInputStream inn = new DataInputStream(new FileInputStream(filnavn));

    int m = inn.readInt(), n = inn.readInt();

    int[][] a = new int[m][n];

    for (int i = 0; i < m; i++)
    {
      for (int j = 0; j < n; j++)
      {
        a[i][j] = inn.readInt();
      }
    }

    inn.close();

    return a;
  }

  public static void main(String[] args) throws IOException
  {
    int[][] a = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};  // 3 x 4

    tabellutskrift(a, "tabell.txt");

    int[][] b = tabellinnlesing("tabell.txt");

    int m = b.length, n = b[0].length;

    for (int i = 0; i < m; i++)
    {
      for (int j = 0; j < n; j++)
      {
        System.out.printf("%3d", b[i][j]);
      }
      System.out.printf("\n");
    }

  }