java - 问一个比较基础的问题,为什么0x8FFFFFF 等于 128 MB ?
阿神
阿神 2017-04-17 17:35:27
0
6
915

怎么换算的啊?进制数之间可以转换,为什么两个不同计量单位之间也可以转换啊?
代码如下:

import java.nio.*;
import java.nio.channels.*;
import java.io.*;
import static net.mindview.util.Print.*;

public class LargeMappedFiles {
  static int length = 0x8FFFFFF; // 128 MB
  public static void main(String[] args) throws Exception {
    MappedByteBuffer out =
      new RandomAccessFile("test.dat", "rw").getChannel()
      .map(FileChannel.MapMode.READ_WRITE, 0, length);
    for(int i = 0; i < length; i++)
      out.put((byte)'x');
    print("Finished writing");
    for(int i = length/2; i < length/2 + 6; i++)
      printnb((char)out.get(i));
  }
}
阿神
阿神

闭关修行中......

membalas semua(6)
洪涛

Ia sepatutnya ralat perkeranian Anda boleh menggunakan kalkulator untuk mengira bahawa 128MB ialah 0x8000000, atau anda boleh mengujinya sendiri dan ujian.data yang dihasilkan ialah 143MB

RandomAccessFile randomAccessFile = new RandomAccessFile("test.data", "rw");
FileChannel channel = randomAccessFile.getChannel();
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 0x8FFFFFF);
Ty80

Tukar kepada binari. . Kira hingga 0

大家讲道理

Walaupun unit 0x8FFFFFF ialah B, ia adalah kira-kira 144MB selepas penukaran 0x8000000 B bersamaan dengan 128MB

洪涛

Sepatutnya kod dan ulasan tidak segerak. Sebagai contoh, ia pada asalnya 0x8000000, iaitu 128MB Kemudian, ia ditukar kepada 0x8FFFFFFF atas sebab tertentu, tetapi saya terlupa untuk menukar ulasan. Atau hanya kesilapan perkeranian. Ini terasa seperti komen "tidak berguna" biasa.

迷茫

0x8FFFFFF hanyalah nombor tanpa unit, bagaimana boleh sama dengan 128M

左手右手慢动作

Ini nampaknya menjadi masalah tentang penukaran antara kod pelengkap, kod songsang dan kod sumber.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan