DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Java中数值类型的存储方法


下面的程序(改自IBM DevelopWorks的"Getting Started with NIO"中的TypesInByteBuffer.java)用一个ByteBuffer对象存储了一个int和一个long,比较清晰的演示了int和long在内存中是如何存储的。 package com.ibm.nio;

import java.nio.ByteBuffer;

public class TypesInByteBuffer {

static public void main(String args[]) throws Exception {

ByteBuffer buffer = ByteBuffer.allocate(64);

buffer.putInt(30);

buffer.putLong(7000000000000L);

buffer.flip(); // set a breakpoint here

System.out.println(buffer.getInt());

System.out.println(buffer.getLong());

}

}

在flip处设置一个断点,查看buffer的值如下: [0, 0, 0, 30, 0, 0, 6, 93, -48, -125, 112, 0,...] 前4个字节存储int,这里是30,后8个字节存储long,这里是 7000000000000L,由于一个字节是8个bit,因此要把一个8字节的内存中的long型数ABCDEFGH转换为10进制数,计算公式是: A256^7 + B256^6 + C256^5 + D256^4 + E256^3 + F256^2 + G256 + H 如果某一位是负数,则用256减去它再进行计算。 所以用Pyhton语法验证就是:62565+93*2564+(256-48)2563+(256-125)256*2+112256,结果就是 7000000000000L。

对于浮点数(float和double型),转换为二进制相对复杂些,参见"IEEE Standard 754 Floating Point Numbers",除了Java语言,C、C++、C#等也都使用相同的方法存储整数和浮点数。



Published

Aug 18, 2011

Last Updated

Aug 18, 2011

Category

Tech

Tags

  • 存储 1
  • 二进制 1
  • Java 106
  • 数值 1

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor