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

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

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));
  }
}
阿神
阿神

闭关修行中......

répondre à tous(6)
洪涛

Il devrait s'agir d'une erreur d'écriture. Vous pouvez utiliser une calculatrice pour calculer que 128 Mo équivaut à 0x8000000, ou vous pouvez le tester vous-même et le test.data généré sera de 143 Mo

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

Convertir en binaire. . Comptez jusqu'à 0

大家讲道理

Même si l'unité de 0x8FFFFFF est B, elle fait environ 144 Mo après conversion, 0x8000000 B est égal à 128 Mo

.
洪涛

Il se pourrait que le code et les commentaires ne soient pas synchronisés. Par exemple, il s'agissait à l'origine de 0x8000000, soit 128 Mo. Plus tard, il a été remplacé par 0x8FFFFFFF pour une raison quelconque, mais j'ai oublié de modifier le commentaire. Ou simplement une erreur matérielle. Cela ressemble à un commentaire « inutile » typique.

迷茫

0x8FFFFFF n'est qu'un nombre sans unité, comment peut-il être égal à 128M

左手右手慢动作

Cela semble être un problème de conversion entre le code complémentaire, le code inverse et le code source.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal