찾다

 >  Q&A  >  본문

java - 问一个比较基础的问题,为什么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));
  }
}
阿神阿神2889일 전926

모든 응답(6)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:37:27

    사무적인 오류여야 합니다. 계산기를 사용하여 128MB가 0x8000000이라고 계산하거나 직접 테스트하면 생성된 test.data가 143MB가 됩니다.

    으아악

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:37:27

    바이너리로 변환합니다. . 0까지 센다

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:37:27

    0x8FFFFFF의 단위가 B라고 해도 0x8000000 B는 128MB 정도가 됩니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:37:27

    코드와 주석이 동기화되지 않은 것 같습니다. 예를 들어 원래는 0x8000000인데 128MB인데 나중에 무슨 이유에서인지 0x8FFFFFFFF로 바뀌었는데 댓글을 바꾸는 걸 깜빡했네요. 아니면 단순히 사무적인 오류일 수도 있습니다. 이것은 전형적인 "쓸모없는" 코멘트처럼 느껴집니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:37:27

    0x8FFFFFF는 단위가 없는 숫자일 뿐인데 어떻게 128M과 같을 수 있나요

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:37:27

    보완코드, 역코드, 소스코드 간의 변환 문제인 것 같습니다.

    회신하다
    0
  • 취소회신하다