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

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

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

闭关修行中......

全員に返信(6)
洪涛

これは事務​​的なエラーであるはずです。電卓を使用して 128MB が 0x8000000 であると計算することもできます。または、自分でテストすると、生成される te​​st.data は 143MB になります。

リーリー
いいねを押す +0
Ty80

バイナリに変換します。 。 0まで数えます

いいねを押す +0
大家讲道理

0x8FFFFFF の単位を B としても、変換後は約 144MB 0x8000000 B は 128MB に相当します

いいねを押す +0
洪涛

コードとコメントが同期していないはずです。たとえば、最初は 0x8000000 で、128MB でしたが、後で何らかの理由で 0x8FFFFFFF に変更されましたが、コメントを変更するのを忘れていました。あるいは単なる事務ミス。これは典型的な「役に立たない」コメントのように感じます。

いいねを押す +0
迷茫

0x8FFFFFF は単位のない単なる数字ですが、どうやって 128M に等しくなります

いいねを押す +0
左手右手慢动作

これは補数コード、逆コード、ソースコード間の変換に関する問題のようです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート