问一个比较基础的问题,为什么0x8FFFFFF 等于 128 MB ?

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

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));
  }
}
阅读 5.8k
6 个回答

应该是一个笔误吧,你用计算器可以算下 128MB是0x8000000,或者你自己测下,产生的test.data就是143MB的

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

转化为二进制。。数0去

就算0x8FFFFFF的单位是B,换算后是144MB左右啊,0x8000000 B才等于128MB

应该是代码跟注释不同步吧。比如本来是0x8000000,也就是128MB,后来因为某种原因改成0x8FFFFFFF了,但忘了改注释。或者干脆就是笔误。感觉这是一个典型的“无用”注释。

0x8FFFFFF只是一个数,没有单位,怎么会等于128M呢

这好像是一个关于补码、反码、源码之间转换的问题吧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题